Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/306.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 更改后重新加载模块_Python_Python 2.7 - Fatal编程技术网

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,这会引发名称错误。我没有显式导入模块(即导入)