我有不同的功能,但每个功能都有不同数量的参数和不同的参数。我希望能够只执行其中一个,并根据函数的名称作为字符串执行此操作。我试过这个:
def execute_function(function_name, arg1, arg2, arg3):
return {
'func1': func1(arg1),
'func2': func2(arg1, arg3),
'func3': func3(arg2),
}[function_name]
但它执行所有功能:(无论字符串是什么function_name
。
你有任何想法为什么会这样,以及如何实现我想要的。 (我是Python的新手)。非常感谢你提前! :)
答案 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]()
在这两种情况下,您都可以在从字典中检索后调用结果对象(partial
或lambda
函数)。