_pycache__文件夾可以看作該文件夾下文件已被python接管或者說編譯過。 在第一次執行代碼的時候,Python解釋器已經把編譯的位元組碼放在__pycache__文件夾中,這樣以後再次運行的話,如果被調用的模塊未發生改變,那就直接跳過編譯這一步,直接去__pycache__文件夾中去運行相關 ...
_pycache__文件夾可以看作該文件夾下文件已被python接管或者說編譯過。
在第一次執行代碼的時候,Python解釋器已經把編譯的位元組碼放在__pycache__文件夾中,這樣以後再次運行的話,如果被調用的模塊未發生改變,那就直接跳過編譯這一步,直接去__pycache__文件夾中去運行相關的 *.pyc
文件,大大縮短了項目運行前的準備時間。
解釋器的具體工作:
1、完成模塊的載入和鏈接;
2、將源代碼編譯為PyCodeObject對象(即位元組碼),寫入記憶體中,供CPU讀取;
3、從記憶體中讀取並執行,結束後將PyCodeObject寫回硬碟當中,也就是複製到.pyc或.pyo文件中,以保存當前目錄下所有腳本的位元組碼文件。
再看_pycache__文件夾下生成的文件名為*.cpython-30.pyc
的文件名的含義,其中cpython
表示c語言實現的Python解釋器,而代表的是版本為3.0
版。
其實,在Python中導入模塊時,實際上會把被導入的模塊執行一遍。
一般來說,我們在主函數中使用if __name__ == '__main__':
是為了保證導入的模塊不被執行。因為_name_
代表的是當前模塊的名字,也就是'__main__'
,而新導入的模塊的名字為其自身的名字,例如為test.py
,那麼經過判斷後,就不會被執行。