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