當(dāng)Python運行腳本時,在代碼開始進(jìn)行處理之前,Python還會執(zhí)行一些步驟。(推薦學(xué)習(xí):Python視頻教程)
第一步是編譯成所謂的“字節(jié)碼”,如果Python進(jìn)程擁有寫入權(quán)限,將把程序的字節(jié)碼保存為一個以.pyc為擴展名的文件, 如果Python無法在機器上寫入字節(jié)碼,程序仍然可以工作:字節(jié)碼將會在內(nèi)存中生成并在程序結(jié)束時簡單地丟棄。一旦程序編譯成字節(jié)碼(或字節(jié)碼從已經(jīng)存在的.pyc文件中載入),之后的字節(jié)碼發(fā)送到通常稱為Python虛擬機(Python VirtualMachine,簡寫為PVM)上來執(zhí)行。
寫完的py文件,首先被翻譯成字節(jié)碼文件(隱藏后綴pyc),然后在用PVM(虛擬機)把字節(jié)碼自動編譯,之后解釋到硬件。
如果已經(jīng)形成過pyc文件,那么你的py文件沒有改動,機器重新解釋的時候會跳過翻譯字節(jié)碼步驟,首先查看你的.py跟.pyc文件時間戳,如果沒有修改那么直接運行pyc文件,否則會重新翻譯字節(jié)碼。
PVM不是一個獨立的程序,是Python的運行引擎,不需要安裝。事實上PVM就是迭代運行字節(jié)碼指令的一個大循環(huán),一個接一個地完成操作。
因此Python具有更多的動態(tài)語言特性:在運行時,Python程序去構(gòu)建并執(zhí)行另一個Python程序是有可能的,而且往往是非常方便的。例如,eval和exec內(nèi)置模塊,能夠接受并運行包含Python程序代碼的字符串。使用如下代碼可以查看add函數(shù)的字節(jié)碼:
import dis def add(a,b): sum=a+b return sum print(dis.dis(add))
更多Python相關(guān)技術(shù)文章,請訪問Python教程欄目進(jìn)行學(xué)習(xí)!
聲明:本網(wǎng)頁內(nèi)容旨在傳播知識,若有侵權(quán)等問題請及時與本網(wǎng)聯(lián)系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com