pyhton中__pycache__文件夾的產(chǎn)生與作用詳解
用python編寫(xiě)了一個(gè)工程,但在第一次運(yùn)行后,發(fā)現(xiàn)工程根目錄下生成了一個(gè)__pycache__文件夾,里面是和py文件同名的各種以.cpython-35.pyc結(jié)尾的文件。cpython-35各項(xiàng)意義,cpython代表的是c語(yǔ)言實(shí)現(xiàn)的Python解釋器,-35代表的是3.5版本。至于pyc,需要先了解一下模塊的調(diào)用。
模塊的調(diào)用
Python導(dǎo)入模塊時(shí),實(shí)際上會(huì)把被導(dǎo)入的模塊執(zhí)行一遍。例如調(diào)用test.py模塊:
def haha(): print("haha") haha()
主程序main.py:
import test print("good")
執(zhí)行結(jié)果:
haha
good
如何才能只是單純調(diào)用而不執(zhí)行被調(diào)用模塊的代碼呢?要想被調(diào)用模塊代碼不被執(zhí)行,可以使用__name__。如果不涉及模塊導(dǎo)入,__name__的值就是__main__,如果模塊被導(dǎo)入引用的話(huà),那么這個(gè)模塊內(nèi)的__name__值就是文件的名字(不帶.py),例如test.py:
def haha(): print("haha") haha() print(__name__)
執(zhí)行結(jié)果為:
haha
__main__
如果test被導(dǎo)入引用的話(huà),例如test2:
import test print("good")
運(yùn)行結(jié)果為:
haha
test
good
在被調(diào)用的模塊中,可執(zhí)行代碼前加上if __name__ == '__main__':這么一句判斷,被調(diào)用的模塊的代碼就不會(huì)被執(zhí)行。
由來(lái)
Python程序運(yùn)行時(shí)不需要編譯成二進(jìn)制代碼,而直接從源碼運(yùn)行程序。簡(jiǎn)單來(lái)說(shuō)是,Python解釋器將源碼轉(zhuǎn)換為字節(jié)碼,然后再由解釋器來(lái)執(zhí)行這些字節(jié)碼。
解釋器的具體工作:
1、完成模塊的加載和鏈接;
2、將源代碼編譯為PyCodeObject對(duì)象(即字節(jié)碼),寫(xiě)入內(nèi)存中,供CPU讀??;
3、從內(nèi)存中讀取并執(zhí)行,結(jié)束后將PyCodeObject寫(xiě)回硬盤(pán)當(dāng)中,也就是復(fù)制到.pyc或.pyo文件中,以保存當(dāng)前目錄下所有腳本的字節(jié)碼文件。
之后若再次執(zhí)行該腳本,它先檢查【本地是否有上述字節(jié)碼文件】和【該字節(jié)碼文件的修改時(shí)間是否在其源文件之后】,是就直接執(zhí)行,否則重復(fù)上述步驟。
第一次執(zhí)行代碼的時(shí)候,Python解釋器已經(jīng)把編譯的字節(jié)碼放在__pycache__文件夾中,這樣以后再次運(yùn)行的話(huà),如果被調(diào)用的模塊未發(fā)生改變,那就直接跳過(guò)編譯這一步,直接去__pycache__文件夾中去運(yùn)行相關(guān)的*.pyc文件,大大縮短了項(xiàng)目運(yùn)行前的準(zhǔn)備時(shí)間。
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
python-opencv獲取二值圖像輪廓及中心點(diǎn)坐標(biāo)的代碼
今天小編就為大家分享一篇python-opencv獲取二值圖像輪廓及中心點(diǎn)坐標(biāo)的代碼,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-08-08Python實(shí)現(xiàn)檢測(cè)文件MD5值的方法示例
這篇文章主要介紹了Python實(shí)現(xiàn)檢測(cè)文件MD5值的方法,涉及Python針對(duì)大文件的讀取、判斷、運(yùn)算、加密等相關(guān)操作技巧,需要的朋友可以參考下2018-04-04python sklearn中tsne算法降維結(jié)果不一致問(wèn)題的解決方法
最近在做一個(gè)文本聚類(lèi)的分析,在對(duì)文本數(shù)據(jù)embedding后,想著看下數(shù)據(jù)的分布,于是用sklearn的TSNE算法來(lái)降維embedding后的數(shù)據(jù)結(jié)果,當(dāng)在多次執(zhí)行后,竟發(fā)現(xiàn)TSNE的結(jié)果竟然變了,而且每次都不一樣,所以本文就給大家講講如何解決sklearn中tsne算法降維結(jié)果不一致的問(wèn)題2023-10-10Python數(shù)據(jù)分析之使用matplotlib繪制折線圖、柱狀圖和柱線混合圖
matplotlib是python的一個(gè)模塊,用于繪制各種圖形,今天介紹一下折線圖的繪制,下面這篇文章主要給大家介紹了關(guān)于Python數(shù)據(jù)分析之使用matplotlib繪制折線圖、柱狀圖和柱線混合圖的相關(guān)資料,需要的朋友可以參考下2022-05-05Bottle框架中的裝飾器類(lèi)和描述符應(yīng)用詳解
這篇文章主要介紹了Bottle框架中的裝飾器類(lèi)和描述符應(yīng)用詳解,具有一定參考價(jià)值,需要的朋友可以了解下。2017-10-10python 已知一個(gè)字符,在一個(gè)list中找出近似值或相似值實(shí)現(xiàn)模糊匹配
今天小編就為大家分享一篇python 已知一個(gè)字符,在一個(gè)list中找出近似值或相似值實(shí)現(xiàn)模糊匹配,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-02-02使用Python合并PDF文件并添加自定義目錄及頁(yè)腳的全過(guò)程
在處理文檔時(shí),我們經(jīng)常遇到需要合并多個(gè)PDF文件并添加目錄及頁(yè)腳的情況,本文將介紹如何使用Python,特別是PyPDF2和reportlab庫(kù)來(lái)實(shí)現(xiàn)這一功能我們將通過(guò)一個(gè)實(shí)用的示例來(lái)演示整個(gè)過(guò)程,需要的朋友可以參考下2024-03-03