在交互模式下使用python,一個模塊導入一個模塊,然後如果模塊被修改(一個錯誤修復或其他),可以簡單地使用reload()命令。在python中重新導入一個函數
但是如果我沒有導入整個模塊並使用'from M import f,g'import語句。有沒有辦法重新導入g?我試着從'del g'中刪除參數表中的函數,並從目錄中刪除.pyc文件,但沒有幫助,當我重新導入函數'from M import g'時,舊的g是加載)。
在交互模式下使用python,一個模塊導入一個模塊,然後如果模塊被修改(一個錯誤修復或其他),可以簡單地使用reload()命令。在python中重新導入一個函數
但是如果我沒有導入整個模塊並使用'from M import f,g'import語句。有沒有辦法重新導入g?我試着從'del g'中刪除參數表中的函數,並從目錄中刪除.pyc文件,但沒有幫助,當我重新導入函數'from M import g'時,舊的g是加載)。
當你做一個from foo import bar
,你是導入整個模塊。您只需在當前名稱空間中製作符號bar
的副本。你是而不是只導入功能。
reload
函數不完全可靠(例如,它不適用於編譯的C模塊)。我會建議你退出並重新啓動你的解釋器。
對於第一個導入,綁定進口片的變量(這也加快了查找):
import numpy as NP
import numpy.linalg as LA
...
reload(LA)
由於這只是用於交互式解釋,我不認爲是這樣:
def my_reload(mod, name):
reload(mod)
globals()[name] = getattr(mod, name)
myreload(somemodule, "some_function")
會很糟糕。這只是像正常一樣重新加載模塊,然後將指向舊對象的名稱重新綁定到新對象。這應該在reload
開始工作的所有情況下都有效。或者,您可以編程它以獲取實際對象並使用其屬性__name__
獲取名稱。函數,類和模塊都具有__name__
屬性,但是像模塊級字典這樣的東西並不那麼靈活。
它不會取代對全球存在以外的對象的引用,但即使您最初使用虛線名稱訪問該對象,它也不會取代reload
。一旦對象的引用鬆動,就沒有太多可以做的事情。
只需重新啓動解釋器;) – Ant 2010-12-08 10:31:01
坦率地說,這就是我所做的。 – 2010-12-08 11:07:28