python源程式執行 Python程式執行機制

2021-10-12 01:22:55 字數 958 閱讀 6128

對於pyhton語言的執行過程,筆者整理了以下流程圖:

關於以上流程圖的說明:

1.執行a.py檔案時,首先會檢查a.py檔案內是否匯入了其他檔案(如import b)

2.若沒有匯入其他檔案,則會將原始碼a.py編譯成中間結果的位元組碼(即pycodeobject,它是放在記憶體中的,並沒有做持久化操作),然後再根據中間結果位元組碼去解釋執行(先編譯再解釋執行)

3.若a.py中匯入了其他檔案,則會判斷是否存在編譯好的其他檔案的中間結果位元組碼(如b.pyc)

注:很多同學在這裡會疑問,同樣是中間結果的位元組碼,那pycodeobject和b.pyc有什麼區別。這裡解釋下,pycodeobject是放在記憶體中的中間結果,其沒有被持久化;而b.pyc是被持久化後的中間結果,是存在硬碟上的

4.若b.pyc檔案存在,則接下來會校驗b.pyc檔案儲存的原始檔修改時間是否等於原始檔b.py真實修改時間

5.若原始檔修改時間一致,則將b.pyc載入至記憶體,根據b的中間結果解釋執行,之後再根據a的中間結果解釋執行

6.若b.pyc檔案不存在,則會編譯b.py檔案生成中間結果pycodeobject,然後持久化編譯結果,生成b.pyc檔案,之後根據b的中間結果解釋執行

同時重點想說明以下幾點:

(1)嚴格來說,python是先編譯成位元組碼,然後再解釋執行的一門語言

(2).pyc檔案的主要作用是持久化編譯結果,提公升下次的執行效率。至於會不會被持久化,一般是根據import機制(如a.py中匯入了b.py檔案,那麼一般都是b.py被持久化。有些同學會有疑問,為什麼a.py為什麼不被持久化,那是因為a.py檔案是當前反覆被編輯的檔案,它的持久化沒有意義)

(3)也可以通過命令手動編譯&持久化:python -m py_compile test.py

(4).py和.pyc檔案都是可以直接交給直譯器直接處理,只不過處理的步驟不太一樣

(5).pyc檔案一定程式上還可起到保護原始碼的作用(但是也有反編譯的過程)

組合語言的源程式執行

end 不是ends assume 假設 debug寫入 單獨編成原始檔在編譯成可執行檔案 執行命令 g go 乙個記憶體單元描述 記憶體單元長度 型別 表示乙個記憶體單元或暫存器中的內容 學習方便的約定 描述物件 描述方法 描述物件 描述方法 ax中內容0010h ax 0010h 2000 10...

python無法執行指令碼 無法執行python指令碼

根據指令 我是python新手 我執行 performance.py localhost 999 我得到這個錯誤 phoenix performance evaluation script 1.0 creating performance table.error could not find or ...

關於源程式到可執行程式的過程

源程式,是指未經編譯的,按照一定的程式語言規範書寫的,人類可讀的文字檔案,我們通常理解為源程式就是我們所寫好的 可執行程式,我們常說的.exe程式,可以執行程式,完成計算機功能。在c語言中,c檔案就是所謂的原始檔,接下來,我們剖析一下,源程式到可執行程式的過程。在這個過程中,會發生如下的變化 c檔案...