執(zhí)行pythondemo.py后,將會啟動Python的解釋器,然后將demo.py編譯成一個字節(jié)碼對象PyCodeObject。
有的人可能會很好奇,編譯的結(jié)果不應(yīng)是pyc文件嗎,就像Java的class文件,那為什么是一個對象呢,這里稍微解釋一下。
在Python的世界中,一切都是對象,函數(shù)也是對象,類型也是對象,類也是對象(類屬于自定義的類型,在Python2.2之前,int,dict這些內(nèi)置類型與類是存在不同的,在之后才統(tǒng)一起來,全部繼承自object),甚至連編譯出來的字節(jié)碼也是對象,.pyc文件是字節(jié)碼對象(PyCodeObject)在硬盤上的表現(xiàn)形式。
在運(yùn)行期間,編譯結(jié)果也就是PyCodeObject對象,只會存在于內(nèi)存中,而當(dāng)這個模塊的Python代碼執(zhí)行完后,就會將編譯結(jié)果保存到了pyc文件中,這樣下次就不用編譯,直接加載到內(nèi)存中。pyc文件只是PyCodeObject對象在硬盤上的表現(xiàn)形式。
這個PyCodeObject對象包含了Python源代碼中的字符串,常量值,以及通過語法解析后編譯生成的字節(jié)碼指令。PyCodeObject對象還會存儲這些字節(jié)碼指令與原始代碼行號的對應(yīng)關(guān)系,這樣當(dāng)出現(xiàn)異常時,就能指明位于哪一行的代碼。
以上內(nèi)容為大家介紹了python編譯器,希望對大家有所幫助,如果想要了解更多Python相關(guān)知識,請關(guān)注IT培訓(xùn)機(jī)構(gòu):千鋒教育。