Python如何重新加載模塊
問(wèn)題
你想重新加載已經(jīng)加載的模塊,因?yàn)槟銓?duì)其源碼進(jìn)行了修改。
解決方案
使用imp.reload()來(lái)重新加載先前加載的模塊。舉個(gè)例子:
>>> import spam>>> import imp>>> imp.reload(spam)<module ’spam’ from ’./spam.py’>>>>
討論
重新加載模塊在開(kāi)發(fā)和調(diào)試過(guò)程中常常很有用。但在生產(chǎn)環(huán)境中的代碼使用會(huì)不安全,因?yàn)樗⒉豢偸窍衲谕哪菢庸ぷ鳌?/p>
reload()擦除了模塊底層字典的內(nèi)容,并通過(guò)重新執(zhí)行模塊的源代碼來(lái)刷新它。模塊對(duì)象本身的身份保持不變。因此,該操作在程序中所有已經(jīng)被導(dǎo)入了的地方更新了模塊。
盡管如此,reload()沒(méi)有更新像”from module import name”這樣使用import語(yǔ)句導(dǎo)入的定義。舉個(gè)例子:
# spam.pydef bar(): print(’bar’)def grok(): print(’grok’)
現(xiàn)在啟動(dòng)交互式會(huì)話:
>>> import spam>>> from spam import grok>>> spam.bar()bar>>> grok()grok>>>
不退出Python修改spam.py的源碼,將grok()函數(shù)改成這樣:
def grok(): print(’New grok’)
現(xiàn)在回到交互式會(huì)話,重新加載模塊,嘗試下這個(gè)實(shí)驗(yàn):
>>> import imp>>> imp.reload(spam)<module ’spam’ from ’./spam.py’>>>> spam.bar()bar>>> grok() # Notice old outputgrok>>> spam.grok() # Notice new outputNew grok>>>
在這個(gè)例子中,你看到有2個(gè)版本的grok()函數(shù)被加載。通常來(lái)說(shuō),這不是你想要的,而是令人頭疼的事。
因此,在生產(chǎn)環(huán)境中可能需要避免重新加載模塊。在交互環(huán)境下調(diào)試,解釋程序并試圖弄懂它。
以上就是Python如何重新加載模塊的詳細(xì)內(nèi)容,更多關(guān)于Python重寫(xiě)加載模塊的資料請(qǐng)關(guān)注好吧啦網(wǎng)其它相關(guān)文章!
相關(guān)文章:
1. 用xslt+css讓RSS顯示的跟網(wǎng)頁(yè)一樣漂亮2. 利用CSS制作3D動(dòng)畫(huà)3. 使用Spry輕松將XML數(shù)據(jù)顯示到HTML頁(yè)的方法4. 存儲(chǔ)于xml中需要的HTML轉(zhuǎn)義代碼5. HTML5 Canvas繪制圖形從入門(mén)到精通6. 讓chatgpt將html中的圖片轉(zhuǎn)為base64方法示例7. CSS3實(shí)現(xiàn)動(dòng)態(tài)翻牌效果 仿百度貼吧3D翻牌一次動(dòng)畫(huà)特效8. 《CSS3實(shí)戰(zhàn)》筆記--漸變?cè)O(shè)計(jì)(一)9. html5手機(jī)觸屏touch事件介紹10. 讀大數(shù)據(jù)量的XML文件的讀取問(wèn)題
