python學習筆記(模塊初識、pyc和PyCodeObject是什麽)
一、模塊初識(一)
模塊,也叫庫。庫有標準庫第三方庫。
註意事項:文件名不能和導入的模塊名相同
1. sys模塊
import sys print(sys.path) #打印環境變量 print(sys.argv) #打印相對路徑,在pycharm輸出結果是絕對路徑,因為在pycharm中調用 print(sys.argv[2]) #可以從數據列表中取值,[2]指取第三位。
標準庫存放位置:C:\Python35\Lib
第三方庫存放位置C:\Python35\Lib\site-packages
2. OS模塊
實例一:
import os os.system("dir") #運行結果:cmd命令行中的dir命令
實例二:
import os cmd_res = os.system("dir") #執行命令,不保存結果 print("--->",cmd_res)
輸出結果為0,因為調用os模塊的輸出結果只到屏幕。0是命令執行的成功與否的狀態:返回0為成功,不是0表明執行錯誤
實例三:
import os cmd_res = os.popen("dir").read() print("--->",cmd_res)
註意加“.read()”和不加的區別:不加輸出結果是內存地址,加了指用read()來讀取
實例四:在當前目錄下創建目錄
import os os.mkdir("new_dir") print("--->",cmd_res)
二、.pyc是什麽
1. python是一門解釋型語言?
初學python時,聽到的關於python的第一句話就是,python是一門解釋型語言,直到發現了*.pyc文件的存在。如果是解釋型語言,那麽生成的*.pyc文件時什麽呢?
c應該是compiled的縮寫。
為了防止學習python時被這句話誤解,需要澄清這個問題,並且把一些基礎概念給理清。
2. 解釋型語言和編譯型語言
計算機是不能識別高級語言的,所以當我們運行一個高級語言程序的時候就需要一個“翻譯機”來從事把高級語言轉變成計算機能讀懂的機器語言的過程。這個過程分成兩類,第一種是編譯,第二種是解釋。
編譯型語言在程序執行之前,先會通過編譯器對程序執行一個編譯的過程,把程序轉變成機器語言。運行時就不需要翻譯,而直接執行就可以了。最典型的例子就是C語言。
解釋型語言就沒有這個編譯的過程,而是程序運行的時候,通過解釋器對程序逐行做出解釋,然後直接運行,最典型的例子就是Ruby。
通過以上的例子,總結一下解釋型語言和編譯型語言的優缺點。因為編譯型語言在程序運行之前就已經對程序做出了“翻譯”,所以在運行時就燒掉了“翻譯”的過程,所以效率比較高。但是我們也不能一概而論,一些解釋型語言也可以通過解釋器的優化來在對程序做出翻譯時對整個程序做出優化,從而在效率上接近編譯型語言。
此外,隨著Java等基於虛擬機的語言的興起,我們有不能把語言純粹地分成解釋型和編譯型這兩種。
用Java來舉例,java首先是通過編譯器編譯成字節碼文件,然後在運行時通過解釋器給解釋成機器文件。所以說java是一種先編碼後解釋的語言。
3. python到底是什麽
其實python和java/C#一樣,也是一門基於虛擬機的語言。
當我們在命令行中輸入python hello.py時,其實是激活了python的“解釋器”,告訴“解釋器”:你要開始工作了。
可是在“解釋”之前,其實執行的第一項工作和java一樣,是編譯。
python是一門先編譯後解釋的語言。
4. 簡述python的運行過程
在說這個問題之前,先說兩個概念,PyCodeObject和pyc文件。
其實PyCodeObject則是python編譯器真正編譯成的結果
當python程序運行時,編譯的結果則是保存在位於內存中的PyCodeObject中,當python程序運行結束時,python解釋器則將PyCodeObject寫回到pyc文件中。
當python程序第二次運行時,首先程序會在硬盤中尋找pyc文件,如果找到,則直接載入,否則就重復上面的過程。
所以我們應該這樣來定位PyCodeObject和pyc文件,我們說pyc文件其實是PyCodeObject的一種持久化保存方式。
python學習筆記(模塊初識、pyc和PyCodeObject是什麽)