溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

Python重新加載模塊的方法

發(fā)布時(shí)間:2020-07-30 09:28:35 來(lái)源:億速云 閱讀:217 作者:小豬 欄目:開(kāi)發(fā)技術(shù)

這篇文章主要講解了Python重新加載模塊的方法,內(nèi)容清晰明了,對(duì)此有興趣的小伙伴可以學(xué)習(xí)一下,相信大家閱讀完之后會(huì)有幫助。

問(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.py
def 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 output
grok
>>> spam.grok() # Notice new output
New grok
>>>

在這個(gè)例子中,你看到有2個(gè)版本的grok()函數(shù)被加載。通常來(lái)說(shuō),這不是你想要的,而是令人頭疼的事。

因此,在生產(chǎn)環(huán)境中可能需要避免重新加載模塊。在交互環(huán)境下調(diào)試,解釋程序并試圖弄懂它。

看完上述內(nèi)容,是不是對(duì)Python重新加載模塊的方法有進(jìn)一步的了解,如果還想學(xué)習(xí)更多內(nèi)容,歡迎關(guān)注億速云行業(yè)資訊頻道。

向AI問(wèn)一下細(xì)節(jié)

免責(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)容。

AI