我有很多模块可以导入和运行。我已使用Dynamic module import in Python动态导入模块。这是主要代码。导入后,我正在尝试运行模块中的函数。
所有模块都看起来像这个结构
#function foo
def run(a,b)
c=a+b
return c
foo
已导入,我需要说bar=foo.run(a,b)
动态
来自这个例子: How to call Python functions dynamically。我已经尝试了以下内容:
i='foo'
bar = getattr(sys.modules[__name__], i+'.run()')(a,b)
追溯AttributeError: 'module' object has no attribute 'foo.run()'
我很困惑,关于属性错误。动态调用函数的例子显然是调用函数。
答案 0 :(得分:2)
the_module.run(a, b)
无论模块出现什么魔法,它都是具有普通属性的普通模块对象,你知道该函数被称为run
。
如果你总是知道你将使用模块foo
,那么你已经完成了。
您可能还需要动态查找模块对象,因为要选择的模块会有所不同。
如果您正确导入模块,使用您用来引用它的名称(例如foo
)而不是其他名称,您也可以使用sys.modules[mod_name]
。
否则,您可能应该有一个模块字典,以便您可以说the_module = modules[mod_name]
。
答案 1 :(得分:2)
如果您已导入foo
,但没有引用它,请使用:
sys.modules['foo'].run(a,b)