Python位元組碼編譯以及PVM

2022-06-09 06:48:11 字數 995 閱讀 3236

執行程式時,python內部會先將源**(我們在檔案編寫的python語句)編譯成所謂的位元組碼形式,編譯就是乙個翻譯的作用,位元組碼是一種低階的,與平台無關的表現形式,也就是說:python通過先將我們的源**逐一分解為單一步驟,然後再將這些單一步驟翻譯成一組位元組碼指令,翻譯的目的是提高執行速度,相對於原**,位元組碼的執行速度要快很多。

上面所說的翻譯過程我們是不可見的,是完全對我們隱藏的,但是我們可以觀察到有乙個在python原始檔的目錄下有乙個同名的.pyc檔案生成(如果python程序在所在的機器上擁有寫入許可權的話)。.pyc檔案是python將原始檔通過位元組碼編譯過後的檔案。python這樣儲存位元組碼也是作為對啟動速度的一種優化,如果在下一次程式執行的時候,在上次儲存位元組碼之後並沒有修改原始檔中的**,且是同乙個python編譯器來執行,那麼python會直接載入.pyc檔案,而不再去重新編譯原始檔。python會自動檢查原始檔和位元組碼的最後一次修改的時間戳,確實其是否需要重新編譯,如果有修改源**,那麼位元組碼將重新建立並編譯。

如果python程序沒有擁有在所在的機器上的寫入許可權,那麼就無法建立位元組碼,但是程式任然可以正常執行,那是因為位元組碼會在記憶體中生成,並且在程式執行之後直接丟棄,但是之前說到.pyc檔案可以加速啟動應用程式,所以最好可以保證大型程式擁有寫入許可權。同時,如果只有位元組碼.pyc檔案,而沒有.py檔案,python任然是可以執行相關程式的。

最後,位元組碼其實是對匯入(匯入的本質就是載入另乙個檔案並給予讀取那個檔案內容的許可權)的優化,也就是說,只有在原始檔中有import的檔案才會生成位元組碼。

一旦程式編譯成位元組碼,之後的位元組碼會傳送到pvm,也就是python虛擬機器上來執行,pvm不是乙個獨立的程式,不需要進行安裝。實質上講:pvm就是迭代執行位元組碼指令的乙個大迴圈,乙個接乙個的完成操作,pvm是python執行時的引擎,邊限為python系統的一部分,並且是實際執行的指令碼元件。

圖參考了python學習手冊

python位元組碼 Python位元組碼簡介

python位元組碼 如果您曾經編寫過python,或者甚至只是使用過python,那麼您可能已經習慣了檢視python源 檔案。它們的名稱以.py結尾。而且您可能還看到了另一種型別的檔案,其名稱以.pyc結尾,並且您可能已經聽說它們是python的 位元組碼 檔案。這些在python 3上很難看到...

python3之位元組碼編譯

python3之位元組碼編譯 當程式執行時,python內部會先將源 編譯成所謂位元組碼的形式。這些位元組碼可以提高執行速度 比起文字檔案中原始的源 語句,位元組碼的執行速度要快得多。如果python程序在機器上 擁有寫入許可權 那麼它將把程式的位元組碼儲存為乙個以 pyc為副檔名 的檔案 pyc ...

python 位元組碼

python位元組碼 hello.py usr bin env python coding utf 8 import m 呼叫m裡的方法 執行之後會生成乙個m.pyc檔案 如果將m.py檔案刪除,只留hello.py和m.pyc檔案,同樣能執行出效果 對於hello.py m.py m.pyc 三個...