我們都知道,使用C/C++之類的編譯性語言編寫的程序,是需要從源文件轉(zhuǎn)換成計算機(jī)使用的機(jī)器語言,經(jīng)過鏈接器鏈接之后形成了二進(jìn)制的可執(zhí)行文件。運行該程序的時候,就可以把二進(jìn)制程序從硬盤載入到內(nèi)存中并運行。
但是對于Python而言,Python源碼不需要編譯成二進(jìn)制代碼,它可以直接從源代碼運行程序。Python解釋器將源代碼轉(zhuǎn)換為字節(jié)碼,然后把編譯好的字節(jié)碼轉(zhuǎn)發(fā)到Python虛擬機(jī)(PVM)中進(jìn)行執(zhí)行。接下來,通過一張圖來描述Python程序的執(zhí)行過程,如圖1所示。
在圖1中,當(dāng)我們運行Python文件程序的時候,Python解釋器會執(zhí)行兩個步驟:
(1)把源代碼編譯成字節(jié)碼
編譯后的字節(jié)碼是特定于Python的一種表現(xiàn)形式,它不是二進(jìn)制的機(jī)器碼,需要進(jìn)一步編譯才能被機(jī)器執(zhí)行,這也是Python代碼無法運行的像C/C++ 一樣快的原因。
如果Python進(jìn)程在機(jī)器上擁有寫入權(quán)限,那么它將把程序的字節(jié)碼保存為一個以.pyc 為擴(kuò)展名的文件,如果Python無法在機(jī)器上寫入字節(jié)碼,那么字節(jié)碼將會在內(nèi)存中生成并在程序結(jié)束時自動丟棄。在構(gòu)建程序的時候最好給Python賦上在計算機(jī)上寫的權(quán)限,這樣只要源代碼沒有改變,生成的.pyc文件可以重復(fù)利用,提高執(zhí)行效率。
(2)把編譯好的字節(jié)碼轉(zhuǎn)發(fā)到Python虛擬機(jī)(PVM)中進(jìn)行執(zhí)行
PVM是Python Virtual Machine的簡稱,它是Python的運行引擎,是Python系統(tǒng)的一部分,它是迭代運行字節(jié)碼指令的一個大循環(huán),一個接一個地完成操作。
初級會計職稱中級會計職稱經(jīng)濟(jì)師注冊會計師證券從業(yè)銀行從業(yè)會計實操統(tǒng)計師審計師高級會計師基金從業(yè)資格稅務(wù)師資產(chǎn)評估師國際內(nèi)審師ACCA/CAT價格鑒證師統(tǒng)計資格從業(yè)
一級建造師二級建造師消防工程師造價工程師土建職稱房地產(chǎn)經(jīng)紀(jì)人公路檢測工程師建筑八大員注冊建筑師二級造價師監(jiān)理工程師咨詢工程師房地產(chǎn)估價師 城鄉(xiāng)規(guī)劃師結(jié)構(gòu)工程師巖土工程師安全工程師設(shè)備監(jiān)理師環(huán)境影響評價土地登記代理公路造價師公路監(jiān)理師化工工程師暖通工程師給排水工程師計量工程師
人力資源考試教師資格考試出版專業(yè)資格健康管理師導(dǎo)游考試社會工作者司法考試職稱計算機(jī)營養(yǎng)師心理咨詢師育嬰師事業(yè)單位教師招聘公務(wù)員公選考試招警考試選調(diào)生村官
執(zhí)業(yè)藥師執(zhí)業(yè)醫(yī)師衛(wèi)生資格考試衛(wèi)生高級職稱護(hù)士資格證初級護(hù)師主管護(hù)師住院醫(yī)師臨床執(zhí)業(yè)醫(yī)師臨床助理醫(yī)師中醫(yī)執(zhí)業(yè)醫(yī)師中醫(yī)助理醫(yī)師中西醫(yī)醫(yī)師中西醫(yī)助理口腔執(zhí)業(yè)醫(yī)師口腔助理醫(yī)師公共衛(wèi)生醫(yī)師公衛(wèi)助理醫(yī)師實踐技能內(nèi)科主治醫(yī)師外科主治醫(yī)師中醫(yī)內(nèi)科主治兒科主治醫(yī)師婦產(chǎn)科醫(yī)師西藥士/師中藥士/師臨床檢驗技師臨床醫(yī)學(xué)理論中醫(yī)理論