1
後的模塊我知道,一個模塊可以重新加載通過發出:刷新變化
reload(module_name)
假設我不導入整個模塊,但只是其中的功能。
from module_name import one_function
如何在更改該功能時重新加載該特定功能。
在此先感謝。
後的模塊我知道,一個模塊可以重新加載通過發出:刷新變化
reload(module_name)
假設我不導入整個模塊,但只是其中的功能。
from module_name import one_function
如何在更改該功能時重新加載該特定功能。
在此先感謝。
您必須重新導入一個名稱才能重新綁定它;您可以在sys.modules
到達緩存模塊對象:
reload(sys.modules['module_name'])
from module_name import one_function
您可以使用inspect.getmodule
獲得擁有一個功能模塊:
import inspect
from math import sqrt
from importlib import reload
math = reload(inspect.getmodule(sqrt))
sqrt = math.sqrt
使用__qualname__
可以自動完成這一過程:
def reload_attr(attribute):
obj = reload(inspect.getmodule(attribute))
for name in attribute.__qualname__.split("."):
try:
obj = getattr(obj, name)
except NameError:
raise ValueError("Unable to find attribute.")
return obj
reload_attr(sqrt)
#>>> <built-in function sqrt>
請注意,這不能保證工作;並非所有的屬性都是微不足道的定位。
爲什麼不重新加載整個模塊?爲什麼你只想重新加載一個函數? – Nilesh 2014-09-20 12:58:35
順便說一句,當你使用'from module_name import one_function'時,**整個模塊**被加載,就像'import module_name'一樣。唯一的區別是名稱被添加到全局名稱空間中。 – unutbu 2014-09-20 13:02:39
Lafada,這引發了一個NameError。 我沒有明確導入模塊(即導入) –
bergercookie
2014-09-20 13:44:01