Python使用参数动态运行函数

时间:2014-04-26 14:07:48

标签: python functional-programming

我有很多模块可以导入和运行。我已使用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()'

我很困惑,关于属性错误。动态调用函数的例子显然是调用函数。

2 个答案:

答案 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)