一区二区三区日韩精品-日韩经典一区二区三区-五月激情综合丁香婷婷-欧美精品中文字幕专区

分享

pyhton中__pycache__文件夾的產(chǎn)生與作用_

 jsdlgx 2020-03-11
展開(kāi)
源起
今天和一新來(lái)的同事溝通,說(shuō)他用python編寫(xiě)了一個(gè)工程,但在第一次運(yùn)行后,發(fā)現(xiàn)工程根目錄下生成了一個(gè)__pycache__文件夾,里面是和py文件同名的各種以 .cpython-35.pyc 結(jié)尾的文件,問(wèn)同事都不太清楚,所以便抽空整理了一下該知識(shí)點(diǎn)。先解釋下cpython-35,cpython代表的是c語(yǔ)言實(shí)現(xiàn)的Python解釋器,-35代表的是版本為3.5版。 
至于pyc,先來(lái)了解一下模塊的調(diào)用。

模塊的調(diào)用
Python中導(dǎo)入模塊時(shí),實(shí)際上會(huì)把被導(dǎo)入的模塊執(zhí)行一遍,如下: 
先看被調(diào)用的模塊test.py:

def haha():
    print("哈哈")

haha()

再看主程序main.py:

import test

print("一條大樹(shù)")

執(zhí)行結(jié)果是:

哈哈
一條大樹(shù)

那怎么才能只是單純調(diào)用而不執(zhí)行被調(diào)用模塊的代碼呢?要想被調(diào)用模塊代碼不被執(zhí)行,前提得知道變量__name__是什么意思,簡(jiǎn)單來(lái)說(shuō)就是,如果不涉及模塊導(dǎo)入的話,__name__的值就是” __main__“,如果當(dāng)此模塊被導(dǎo)入引用的話,那么這個(gè)模塊內(nèi)的__name__值就是文件的名字(不帶.py),如下test_1.py:

def haha():
    print("哈哈")

haha()
print(__name__)

test_1.py執(zhí)行結(jié)果為:

哈哈
__main__

如果test_1被導(dǎo)入引用的話,如test_2:

import test_1

print("一條大樹(shù)")

test_2x運(yùn)行結(jié)果為:

哈哈
test_1
一條大樹(shù)

上邊所說(shuō)要是弄懂的話,那我們?cè)诒徽{(diào)用的模塊中,可執(zhí)行的代碼前加上這么一句判斷,if __name__ == '__main__':,被調(diào)用的模塊的代碼就不會(huì)被執(zhí)行了!

接下來(lái)才是正題
以下參考自Joy_Shen的一個(gè)回答。 
先大概了解一下python基本運(yùn)行機(jī)制。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ù)上述步驟。

那有的小伙伴就有疑問(wèn)了,__pycache__文件夾的意義何在呢? 
因?yàn)榈谝淮螆?zhí)行代碼的時(shí)候,Python解釋器已經(jīng)把編譯的字節(jié)碼放在__pycache__文件夾中,這樣以后再次運(yùn)行的話,如果被調(diào)用的模塊未發(fā)生改變,那就直接跳過(guò)編譯這一步,直接去__pycache__文件夾中去運(yùn)行相關(guān)的 *.pyc 文件,大大縮短了項(xiàng)目運(yùn)行前的準(zhǔn)備時(shí)間。

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買(mǎi)等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多

    欧美做爰猛烈叫床大尺度| 欧美日韩一级黄片免费观看 | 中文字幕人妻综合一区二区| 国产成人午夜福利片片| 欧美黄色黑人一区二区| 国产一级一片内射视频在线| 午夜福利大片亚洲一区| 人妻少妇系列中文字幕| 欧洲一区二区三区自拍天堂| 国产欧美一区二区另类精品| 国产精品视频一区二区秋霞 | 一区二区日本一区二区欧美| 亚洲精品国男人在线视频| 丝袜美女诱惑在线观看| 日韩人妻免费视频一专区| 亚洲a码一区二区三区| 视频在线免费观看你懂的| 尹人大香蕉中文在线播放| 粉嫩一区二区三区粉嫩视频| 91精品国自产拍老熟女露脸| 亚洲中文字幕视频在线观看| 欧美国产日本免费不卡| 国产午夜精品美女露脸视频| 成人免费观看视频免费| 高清一区二区三区大伊香蕉 | 亚洲一区二区三区四区性色av| 精品国产亚洲免费91| 欧美一级日韩中文字幕| 国产精品国产亚洲看不卡| 老司机精品在线你懂的| 亚洲一级二级三级精品| 激情内射日本一区二区三区| 国产一区在线免费国产一区| 成人精品日韩专区在线观看| 中文字幕亚洲人妻在线视频 | 草草视频福利在线观看| 太香蕉久久国产精品视频| 永久福利盒子日韩日韩| 亚洲精品一区三区三区| 亚洲国产香蕉视频在线观看| 久久热九九这里只有精品|