【问题标题】:How to call a function from a module name that is assigned to a variable如何从分配给变量的模块名称中调用函数
【发布时间】:2016-07-08 11:00:23
【问题描述】:

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

例如,

模块.py

def module():
    print "x"

运行.py

ent="module"
__import__(ent)
ent()

我可以使用变量ent 导入该模块。但是当我使用该变量调用该函数时,我得到了这个错误:

TypeError: 'str' object is not callable

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

【问题讨论】:

  • ent 仍然是 "module",您实际上还没有分配导入。另请注意,您需要致电ent.module()
  • 为什么不只是import module
  • 这是可行的,但是为什么你想让模块和函数名称像那样动态?
  • 我发现问题本身很清楚;希望我的编辑使它更清晰一些。我承认我仍然对 为什么 OP 想要在运行时获取函数和模块名称感到困惑,也许这是一个 XY 问题......

标签: python function module


【解决方案1】:

正如 Jon 所说,您没有保存对导入模块的引用。你需要它来调用它的函数。要真正使用该功能,您可以使用内置的getattr 功能。例如,

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

但是,使用__import__ 是相当不寻常的,并且只在特殊情况下使用。您的情况是否特殊到足以保证使用它?

【讨论】:

  • 感谢您的回复。在代码中,ent 只是一个 raw_input。根据 raw_input,它正在导入与 ent 同名的模块。在该模块中有一个函数与 raw_input 同名。所以我必须使用该变量导入该模块。
  • 感谢您的解决方案。我会试一试。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-02-22
  • 2021-11-15
  • 2018-12-26
  • 2013-09-16
  • 1970-01-01
  • 2015-08-14
  • 2021-02-07
相关资源
最近更新 更多