在python中重新导入单个函数

2024-09-26 18:00:09 发布

您现在位置:Python中文网/ 问答频道 /正文

在交互模式下使用python可以导入一个模块,如果该模块发生了更改(bug修复或其他),则可以简单地使用reload()命令。在

但是如果我没有导入整个模块,并使用'from M import f,g'import语句呢。有没有办法只重新导入g?在

(我尝试通过'delg'从参数表中删除函数,并从目录中删除.pyc文件。没用。当我重新导入函数'from M import g'时,旧的g已加载)。在


Tags: 模块文件函数fromimport命令目录模式
3条回答

当您执行from foo import bar操作时,您将导入整个模块。您只是在当前名称空间中复制符号bar。你只是在导入函数。在

reload函数不是完全可靠的(例如,它不能用于编译的C模块)。我建议你退出并重新启动你的口译员。在

因为这只是为交互式口译员准备的,所以我不认为:

def my_reload(mod, name):
    reload(mod)
    globals()[name] = getattr(mod, name)

myreload(somemodule, "some_function")

太可怕了。这只需像normal一样重新加载模块,然后将指向旧对象的名称重新绑定到新对象。这应该适用于reload开始工作的所有实例。或者,您可以对其进行编程,使其获得实际对象并使用其__name__属性获得名称。函数、类和模块都有一个__name__属性,但是像模块级字典这样的东西就没有了,所以它就没有那么灵活了。在

它不会替换对除全局对象以外的对象的引用,但reload也不会,即使您最初是用虚线名称访问它的。一旦一个对象的引用是松散的,你就无能为力了。在

对于from M import f, g,其中M不是正式的python模块,请使用:

import sys
import importlib
importlib.reload(sys.modules['M'])

然后,使用以下方法重新导入f和{}:

^{pr2}$

如果M是一个正式的python模块,请使用

import importlib
importlib.reload(M)
from M import f,g

相关问题 更多 >

    热门问题