Python中的reload函式

2022-05-15 08:50:35 字數 1481 閱讀 9631

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)'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模組當中

Python中的reload函式

python中的import語句可以匯入module檔案,但是import語句只是第一次匯入的時候會執行module檔案中的 然後就會把匯入的模組檔案存入到記憶體,當再次匯入的時候,python是直接從記憶體裡面取出module檔案,而不會執行module檔案的內容了,而reload函式強制pyth...

Python中的defaultdict函式

用於產生乙個帶有預設值的dict。主要針對key不存在的情況下,也希望有返回值的情況。a dict a k1 1 a a k2 traceback most recent call last file line 1,in keyerror k2 對於普通的dict,key不存在就報錯。但是對於def...

python中ground truth的函式

機器學習包括有監督學習 supervised learning 無監督學習 unsupervised learning 和半監督學習 semi supervised learning 在 有監督學習中,資料是有標註的,以 x,t 的形式出現,其中x是輸入資料,t是標註.正確的t標註是ground t...