Python 更改后重新加载模块
我知道可以通过发出以下命令来重新加载模块:Python 更改后重新加载模块,python,python-2.7,Python,Python 2.7,我知道可以通过发出以下命令来重新加载模块: reload(module_name) 假设我不导入整个模块,只导入其中的一个函数 from module_name import one_function 当您对特定函数进行了更改时,如何重新加载该函数 提前感谢。您必须重新导入一个名称以重新绑定它;您可以在sys.modules中访问缓存的模块对象: reload(sys.modules['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
使用
\uuuuu qualname\uuuu
可以自动执行此过程:
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>
def reload_attr(属性):
obj=重新加载(inspect.getmodule(属性))
用于属性中的名称。\u相等名称\u.split(“.”):
尝试:
obj=getattr(obj,名称)
除名称错误外:
raise VALUERROR(“无法找到属性”)
返回obj
重新加载属性(sqrt)
#>>>
请注意,这并不能保证有效;并非所有属性都很容易找到。为什么不重新加载整个模块?为什么只想重新加载一个函数?顺便说一下,当您使用“从模块名称导入一个函数”时,将加载整个模块,就像“导入模块名称”一样。唯一的区别是全局名称空间中添加了哪些名称。Lafada,这会引发名称错误。我没有显式导入模块(即导入)