您好,登錄后才能下訂單哦!
不管是用import還是用from mmmm import *的方式導(dǎo)入模塊,當(dāng)程序運(yùn)行之后,回頭在看那個(gè)存儲(chǔ)著mmmm.py文件的目錄中,多了一個(gè)文件:
$ ls mmm* mmmm.py mmmm.pyc
在這個(gè)目錄下面,除了原來(lái)的那個(gè)mmmm.py之外,又多了一個(gè)mmmm.pyc文件,這個(gè)文件不是我寫(xiě)的,需要用import的過(guò)程說(shuō)起。
import的工作流程
import mmmm,并不是僅僅將mmmm.py這個(gè)文件裝載到當(dāng)前位置(文件內(nèi)),其實(shí)是首先進(jìn)行了一次運(yùn)算。當(dāng)mmmm.py被第一次導(dǎo)入的時(shí)候,python首先要對(duì)其進(jìn)行編譯,生成擴(kuò)展名為.pyc的同名文件,然后才執(zhí)行mmmm模塊的代碼,創(chuàng)建相應(yīng)的對(duì)象等。就如同把大象裝進(jìn)冰箱,有三步要執(zhí)行:
搜索模塊
一般情況下,python會(huì)自動(dòng)的完成模塊搜索過(guò)程。但是,在某些情況下,或許會(huì)要求程序員來(lái)設(shè)定搜索路徑。當(dāng)import一個(gè)模塊后,python會(huì)按照下面的順序來(lái)找那個(gè)將要導(dǎo)入的模塊文件
也可以自己編寫(xiě).pth文件,里面是有關(guān)搜索目錄,保存到這里。比如,打開(kāi)目錄中的easy-install.pth文件,發(fā)現(xiàn)的內(nèi)容:
搜索就是這么一個(gè)過(guò)程。這里建議了解即可,不一定非要進(jìn)行什么設(shè)置,在很多情況下,python都是會(huì)自動(dòng)完成的。特別是初學(xué)者,暫且不要輕舉妄動(dòng)。
重載模塊
以mmmm模塊為例。
在一個(gè)shell里面,運(yùn)行了python,并且做了如下操作:
>>> import mmmm >>> mmmm.web 'https://hiekay.github.io'
下面我再打開(kāi)一個(gè)shell,編輯mmmm.py這個(gè)文件,對(duì)web值進(jìn)行適當(dāng)修改:
#!/usr/bin/env python #coding:utf-8 web = "https://hiekay.github.io, I am writing a python book on line. " def my_name(name): print name class pythoner: def __init__(self,lang): self.lang = lang def programmer(self): print "python programmer language is: ",self.lang
保存之后,切換到原來(lái)的那個(gè)導(dǎo)入了模塊的交互模式:
>>> mmmm.web 'https://hiekay.github.io'
輸出的跟前面的一樣,沒(méi)有任何變化,這是為什么呢?
原來(lái),當(dāng)導(dǎo)入模塊的時(shí)候,只會(huì)在第一次導(dǎo)入時(shí)加載和執(zhí)行模塊代碼,之后就不會(huì)重新加載或重新執(zhí)行了,如果模塊代碼修改了,但是這里執(zhí)行的還是修改之前的。
怎么實(shí)現(xiàn)代碼修改之后,執(zhí)行新的呢?一種方式就是退出原來(lái)的交互模式,再重新進(jìn)入,再import mmmm。這種方法有點(diǎn)麻煩。Python提供了另外一個(gè)函數(shù)——reload函數(shù),能夠?qū)崿F(xiàn)模塊的重新加載(簡(jiǎn)稱(chēng)重載),重載后模塊代碼重新執(zhí)行。如下繼續(xù):
>>> reload(mmmm) <module 'mmmm' from 'mmmm.py'> >>> mmmm.web 'https://hiekay.github.io, I am writing a python book on line. '
這下就顯示修改之后的內(nèi)容了。
特別提醒注意:
總結(jié)
以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,謝謝大家對(duì)億速云的支持。如果你想了解更多相關(guān)內(nèi)容請(qǐng)查看下面相關(guān)鏈接
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。