在Python中通过变量名执行函数

时间:2011-03-22 12:28:25

标签: python

我需要做的是循环遍历大量不同的文件,并(尝试)从文件中获取元数据。

我可以创建一个大的if ... elif ...并测试每个扩展,但我认为将扩展存储在变量中会更容易,检查是否存在具有该名称的函数,然后执行它

这是我目前的解决方案,取自另一个stackoverflow线程:

try:
    getattr(modulename, funcname)(arg)
except AttributeError:
    print 'function not found "%s" (%s)' % (funcname, arg)

这有一个问题: 如果基础函数引发AttributeError,则将其注册为“未找到函数”错误。 我可以添加try ...除了块到所有函数,但这也不是特别漂亮......

我正在寻找的更像是:

if function_exists(fun):
  execute_function(fun, arg)

有这么简单的方法吗?

谢谢: - )

5 个答案:

答案 0 :(得分:24)

你可以这样做:

func = getattr(modulename, funcname, None):
if func:
    func(arg)

或者更好:

try:
    func = getattr(modulename, funcname)
except AttributeError:
    print 'function not found "%s" (%s)' % (funcname, arg)
else:
    func(arg)

答案 1 :(得分:3)

gettattr function有一个可选的第三个参数,如果该属性不存在则返回默认值,因此你可以使用它:

fun = getattr(modulename, funcname, None)

if fun is None:
    print 'function not found "%s" (%s)' % (funcname, arg)
else
    fun(arg)

答案 2 :(得分:2)

我发现的方式是:

代码

def My_Function():
     print ("Hello World!")

FunctionName = "My_Function"

(FunctionName)()

输出

Hello World!

答案 3 :(得分:0)

就像@mouad所说,callable(function)可以调用一个函数。

您可以使用此函数从变量内部调用函数:

callable(SAVE())

这将调用指定为arg。

的函数

在变量中使用它:

Save = callable(SAVE())

答案 4 :(得分:0)

您也可以尝试

eval('func_name()')