根据参数 - 名称选择要执行的功能

时间:2014-04-17 11:12:34

标签: python python-3.3

我有不同的功能,但每个功能都有不同数量的参数和不同的参数。我希望能够只执行其中一个,并根据函数的名称作为字符串执行此操作。我试过这个:

def execute_function(function_name, arg1, arg2, arg3):
    return {
        'func1': func1(arg1),
        'func2': func2(arg1, arg3),
        'func3': func3(arg2),
    }[function_name]

但它执行所有功能:(无论字符串是什么function_name

你有任何想法为什么会这样,以及如何实现我想要的。 (我是Python的新手)。非常感谢你提前! :)

1 个答案:

答案 0 :(得分:6)

您需要将函数添加到字典中;您添加了结果

要支持变量参数,请使用lambdas或functools.partial()来包装函数:

def execute_function(function_name, arg1, arg2, arg3):
    return {
        'func1': lambda: func1(arg1),
        'func2': lambda: func2(arg1, arg3),
        'func3': lambda: func3(arg2),
    }[function_name]()

from functools import partial

def execute_function(function_name, arg1, arg2, arg3):
    return {
        'func1': partial(func1, arg1),
        'func2': partial(func2, arg1, arg3),
        'func3': partial(func3, arg2),
    }[function_name]()

在这两种情况下,您都可以在从字典中检索后调用结果对象(partiallambda函数)