Python 之模塊重載的五種方法
python環(huán)境準(zhǔn)備
新建一個(gè)foo文件夾,其下包含一個(gè)bar.py文件:
$treefoo
foo
└──bar.py
0directories,1file
bar.py的內(nèi)容非常簡單,只寫了個(gè)print語句:
print("successfultobeimported")
只要bar.py被導(dǎo)入一次,就被執(zhí)行一次print。
禁止重復(fù)導(dǎo)入由于有sys.modules的存在,當(dāng)你導(dǎo)入一個(gè)已導(dǎo)入的模塊時(shí),實(shí)際上是沒有效果的。
>>>fromfooimportbar
successfultobeimported
>>>fromfooimportbar
>>>
重載模塊方法一
如果你使用的python2(記得前面在foo文件夾下加一個(gè)__init__.py),有一個(gè)reload的方法可以直接使用:
>>>fromfooimportbar
successfultobeimported
>>>fromfooimportbar
>>>
>>>reload(bar)
successfultobeimported
如果你使用的python3那方法就多了,詳細(xì)請看下面。
重載模塊方法二
如果你使用Python3.0->3.3,那么可以使用imp.reload方法:
>>>fromfooimportbar
successfultobeimported
>>>fromfooimportbar
>>>
>>>importimp
>>>imp.reload(bar)
successfultobeimported
但是這個(gè)方法在Python3.4+,就不推薦使用了。
:1:DeprecationWarning:theimpmoduleisdeprecatedinfavourofimportlib;seethemodule'sdocumentationforalternativeuses
重載模塊方法三
如果你使用的Python3.4+,請使用importlib.reload方法:
>>>fromfooimportbar
successfultobeimported
>>>fromfooimportbar
>>>
>>>importimportlib
>>>importlib.reload(bar)
successfultobeimported
重載模塊方法四
如果你對包的加載器有所了解,還可以使用下面的方法:
>>>fromfooimportbar
successfultobeimported
>>>fromfooimportbar
>>>
>>>bar.__spec__.loader.load_module()
successfultobeimported
重載模塊方法五
既然影響我們重復(fù)導(dǎo)入的是sys.modules,那我們只要將已導(dǎo)入的包從其中移除是不是就好了呢?
>>>importfoo.bar
successfultobeimported
>>>
>>>importfoo.bar
>>>
>>>importsys
>>>sys.modules['foo.bar']
>>>delsys.modules['foo.bar']
>>>
>>>importfoo.bar
successfultobeimported
有沒有發(fā)現(xiàn)在前面的例子里我使用的都是fromfooimportbar,在這個(gè)例子里,卻使用importfoo.bar,這是為什么呢?
這是因?yàn)槿绻闶褂胒romfooimportbar這種方式,想使用移除sys.modules來重載模塊這種方法是失效的。
這應(yīng)該算是一個(gè)小坑,不知道的人,會掉入坑中爬不出來。
>>>importfoo.bar
successfultobeimported
>>>
>>>importfoo.bar
>>>
>>>importsys
>>>delsys.modules['foo.bar']
>>>fromfooimportbar
>>>
以上內(nèi)容為大家介紹了Python之模塊重載的五種方法,希望對大家有所幫助,如果想要了解更多Python相關(guān)知識,請關(guān)注IT培訓(xùn)機(jī)構(gòu):千鋒教育。http://www.mobiletrain.org/

相關(guān)推薦HOT
更多>>
python字符串和Java字符串
接下來,又到了Python字符串與Java字符串PK的時(shí)刻。Java中有比較字符串的方法,即compareTo()方法與equals()方法,前一個(gè)方法逐一比較兩個(gè)字符...詳情>>
2023-11-05 21:58:02
用Python開發(fā)一個(gè)簡單的猜數(shù)字游戲
本文介紹如何使用Python制作一個(gè)簡單的猜數(shù)字游戲。游戲規(guī)則玩家將猜測一個(gè)數(shù)字。如果猜測是正確的,玩家贏。如果不正確,程序會提示玩家所猜的...詳情>>
2023-11-05 21:40:12
跟蹤數(shù)據(jù)的Python技巧
了解如何運(yùn)用Python的某些數(shù)據(jù)對象,有利于保持井然有序的狀態(tài),避免在處理數(shù)據(jù)科學(xué)項(xiàng)目中的大量數(shù)據(jù)時(shí)出錯(cuò)。在數(shù)據(jù)科學(xué)項(xiàng)目中,有時(shí)想跟蹤數(shù)據(jù)...詳情>>
2023-11-05 20:37:09
Python之描述符
Descriptors(描述符)是Python語言中一個(gè)深?yuàn)W但很重要的一個(gè)黑魔法,它被廣泛應(yīng)用于Python語言的內(nèi)核,熟練掌握描述符將會為Python程序員的工具...詳情>>
2023-11-05 18:48:43熱門推薦
Python查看模塊中的屬性
沸Python之三目運(yùn)算
熱用于業(yè)余項(xiàng)目的優(yōu)秀 Python 庫
熱使用Black自由格式化Python
新python的十個(gè)第三方庫
python字符串和Java字符串
用Python開發(fā)一個(gè)簡單的猜數(shù)字游戲
入門Python的4大陷阱
為什么開發(fā)人員喜歡在機(jī)器學(xué)習(xí)和人工智能項(xiàng)目中使用Python?
跟蹤數(shù)據(jù)的Python技巧
Python處理文件的幾個(gè)常用小知識
python經(jīng)典最短代碼實(shí)現(xiàn)排序的功能
Python 之模塊重載的五種方法
Python內(nèi)存分配
技術(shù)干貨







快速通道 更多>>
-
課程介紹
點(diǎn)擊獲取大綱 -
就業(yè)前景
查看就業(yè)薪資 -
學(xué)習(xí)費(fèi)用
了解課程價(jià)格 -
優(yōu)惠活動(dòng)
領(lǐng)取優(yōu)惠券 -
學(xué)習(xí)資源
領(lǐng)3000G教程 -
師資團(tuán)隊(duì)
了解師資團(tuán)隊(duì) -
實(shí)戰(zhàn)項(xiàng)目
獲取項(xiàng)目源碼 -
開班地區(qū)
查看來校路線