人生苦短,我用Python。
作為一個開發人員,如何寫代碼是必須要知道的,代碼如何運作也是有必要了解的。通過了解代碼如何運作,可指導我們寫出效率更高的代碼。下午看了《Python學習手冊》第二章,了解了一些比較有趣的東西,是以做個總結。
let's do it
Python解釋器
提到Python印象大多是程式設計語言。其實Python是一個名為解釋器的軟體包,通俗一點解釋器就是将你的代碼解釋給計算機。
官方點,解釋器是代碼與機器的計算機硬體之間的軟體邏輯層。
當安裝Python後,他會生成一些元件:至少包括一個解釋器和一套支援庫。
根據使用情況不同,解釋器可能采取可執行程式的形式,或做為連結到另一個程式的庫
根據版本不同,解釋器本身可以用 C程式實作,或一些Java類實作。
無論如何Python代碼必須在解釋器上運作
程式執行
慣例,Python檔案都是以.py結尾, 但是從技術上來講,這種命名方案在被“導入”時才是必須的。
當Python運作腳本時,在代碼運作前還要做一些工作。
将源碼編譯成位元組碼(不是機器碼)
将編譯的位元組碼放到Python虛拟機(PVM)中運作
位元組碼編譯
編譯是一種簡單的翻譯步驟,位元組碼是一種低級的,與平台無關的表現形式(可移植性)這些位元組碼可以提高執行速度,比源碼快得多。
如果Python程序有寫入權限,那麼他會把位元組碼儲存為一個.pyc為擴充名的檔案,3.2之後版本将其放在__pycache__的子目錄中,友善下次PVM跳過編譯直接取用,沒有寫入權限的話運作程式還是會翻譯成位元組碼,隻不過放記憶體,程式殺死之後就被丢棄。
Python會檢測源檔案是否改變,沒變就直接用上次的.pyc。
對于Python版本,.pyc的檔案名中包含版本,是以可差別不同版本編譯的.pyc
.pyc檔案起到加速啟動的作用,類似于作業系統的緩存,隻不過是執行了一部分再緩存。
Python虛拟機(PVM)
PVM用來執行位元組碼檔案。 但實際上它不是一個獨立的程式,不用安裝,
本質其實就是一個疊代執行位元組碼指令的大循環,一步步的完成操作。期間會将位元組碼編譯成二進制碼。
是以,最終的效果是純Python代碼執行速度介于傳統編譯語言和傳統解釋性語言之間(cache的作用)
對開發的意義:編譯和執行的的環境是同一個,。是以編譯器總在運作時出現,這就使Python程式在運作時去建構和執行另一個Python程式成為可能
執行模型的變體
除了傳統的實作模式,Python還有很多實作,簡單說一下
CPython:标準Python
由可移植的ANSI C語言代碼編寫而成,一般來說用的都是這個
特點:運作速度最快、最完整、最新、最健全。上面的圖便是CPython的運作時體系結構。
Jython:基于Java的Python
與Java進行內建
IronPython:基于.Net的Python
Stackless:注重并發的Python
PyPy:注重速度的Python 比較有潛力,特别是在CPU密集型代碼,計算領域(AI)
随着Python的持續升溫,相信以後更加高效的執行模型會出來。
當機二進制檔案
最後記錄下這個,就是生成的可執行檔案(獨立的二進制可執行), 有種打包釋出的意思
有許多系統可以生成随平台特性變化的當機二進制檔案
當機二進制檔案其實就是将位元組碼和PVM混合在一起形成的一個獨立元件。由于代碼嵌入在當機二進制檔案中,對于接收者來說,代碼是看不見的。
這樣便實作的單檔案的封裝,終端使用者都不用安裝Python就可以運作這些程式。
如何運作大概知道了。
學習尚淺,有錯誤或不當之處還請指正。