Python 如何从分配给变量的模块名调用函数

Python 如何从分配给变量的模块名调用函数,python,function,module,Python,Function,Module,我正在尝试从模块调用函数。模块和函数具有相同的名称,在运行时使用raw\u input()读取并存储在变量中 比如说, 模块.py run.py 我可以使用变量ent导入该模块。但是,当我使用该变量调用该函数时,我得到以下错误: TypeError: 'str' object is not callable 当我直到运行时才知道它们的名称时,如何从模块调用该函数?正如Jon提到的,您没有保存对导入模块的引用。你需要它来调用它的函数。要实际访问该函数,可以使用内置的getattr函数。例如 en

我正在尝试从模块调用函数。模块和函数具有相同的名称,在运行时使用
raw\u input()
读取并存储在变量中

比如说,

模块.py run.py 我可以使用变量
ent
导入该模块。但是,当我使用该变量调用该函数时,我得到以下错误:

TypeError: 'str' object is not callable

当我直到运行时才知道它们的名称时,如何从模块调用该函数?

正如Jon提到的,您没有保存对导入模块的引用。你需要它来调用它的函数。要实际访问该函数,可以使用内置的
getattr
函数。例如

ent = "module"
mod = __import__(ent)
func = getattr(mod, ent)
func()

然而,使用
\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu
是相当不寻常的,而且只在特殊情况下。您的情况是否特殊到足以保证其使用?

ent
仍然是
“模块”
,您尚未实际分配导入。还请注意,您需要调用
ent.module()
。为什么不仅仅是
import module
?这是可以做到的,但是为什么您希望模块和函数名像这样是动态的呢?我发现这个问题本身已经很清楚了;希望我的编辑能让它更清晰一点。我承认我仍然不明白OP为什么要在运行时获取函数和模块名,也许这是XY问题…谢谢你的回答。在代码中ent只是一个原始输入。根据原始输入,它正在导入与ent同名的模块。在该模块中有一个与原始输入同名的函数。因此,我必须使用该变量导入该模块。谢谢你的解决方案。我将给出这是一次尝试。
TypeError: 'str' object is not callable
ent = "module"
mod = __import__(ent)
func = getattr(mod, ent)
func()