天天看點

python運作不了程式代碼_Python如何運作程式

人生苦短,我用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運作不了程式代碼_Python如何運作程式

執行模型的變體

除了傳統的實作模式,Python還有很多實作,簡單說一下

CPython:标準Python

由可移植的ANSI C語言代碼編寫而成,一般來說用的都是這個

特點:運作速度最快、最完整、最新、最健全。上面的圖便是CPython的運作時體系結構。

Jython:基于Java的Python

與Java進行內建

IronPython:基于.Net的Python

Stackless:注重并發的Python

PyPy:注重速度的Python 比較有潛力,特别是在CPU密集型代碼,計算領域(AI)

随着Python的持續升溫,相信以後更加高效的執行模型會出來。

當機二進制檔案

最後記錄下這個,就是生成的可執行檔案(獨立的二進制可執行), 有種打包釋出的意思

有許多系統可以生成随平台特性變化的當機二進制檔案

當機二進制檔案其實就是将位元組碼和PVM混合在一起形成的一個獨立元件。由于代碼嵌入在當機二進制檔案中,對于接收者來說,代碼是看不見的。

這樣便實作的單檔案的封裝,終端使用者都不用安裝Python就可以運作這些程式。

如何運作大概知道了。

學習尚淺,有錯誤或不當之處還請指正。