python中的import語句可以匯入module檔案,但是import語句只是第一次匯入的時候會執行module檔案中的**,然後就會把匯入的模組檔案存入到記憶體,當再次匯入的時候,python是直接從記憶體裡面取出module檔案,而不會執行module檔案的內容了,而reload函式強制python重新匯入並執行module檔案。
假設有module檔案a.py:
defchanger():
print("
first version
")
然後在可互動的控制台執行如下**:
>>>importa>>>a.changer()
"first version
"
然後我們不退出可互動式控制台,然後修改a.py:
defchanger():
pirnt(
"second version
")
然後在到可互動的控制台執行如下**:
>>>importa>>>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...