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