Python中的reload函數


Python中的import語句可以導入module文件,但是import語句只是第一次導入的時候會執行module文件中的代碼,然后就會把導入的模塊文件存入到內存,當再次導入的時候,Python是直接從內存里面取出module文件,而不會執行module文件的內容了,而reload函數強制Python重新導入並執行module文件。

假設有module文件a.py:

def changer():
    print("First Version")

然后在可交互的控制台執行如下代碼:

>>>import a
>>>a.changer()
"First Version"

然后我們不退出可交互式控制台,然后修改a.py:

def changer():
    pirnt("Second Version")

然后在到可交互的控制台執行如下代碼:

>>>import a
>>>a.changer()         # 已經導入的module文件,直接從內存里面取,不會執行
"First Version"


>>>from imp import reload   # 對於Python 3.X來說,reload不是內置函數,而是imp module的一個函數
>>>reload(a)
<module 'a' form '/home/chaochao/python/a.py'>
>>>a.changer()       # 對module文件a.py的改動反映出來了
"Sencond Version"

 

 

注意事項

1 由於import導入的moudle文件,使用的時候需要使用module.attr的方式,而reload會強制運行module文件,那么,會對使用import導入進來的module文件有影響,因為reload執行module文件后,module.attr的值會被覆蓋;

2 由於from導入的module文件,其本質是進行了一個賦值操作,即在當前文件中(即執行from語句的文件)進行attr = module.attr,那么,reload函數對reload運行之前的from語句沒有影響,換句話說,當前文件(即執行from語句的文件)中的變量attr與module.attr引用的已經是兩個不同的變量了;

3 假設a.py自己import b.py,那么reload(a)並不會reload(b),也就是說,reload不具有傳遞性

4 使用reload的前提,是reload的 模塊,之前已經使用import或者from導入成功了,否則,reload也無法生效

5 對於Python 2.X來說,reload是一個內置函數,而Python 3.X將reload函數移動到了imp模塊當中


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM