根据参数选择执行的函数 - 函数名
我有几个不同的函数,但每个函数需要的参数数量和类型都不一样。我想根据函数的名字(以字符串形式)来执行其中的一个函数。为此,我尝试了以下代码:
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 个回答
9
你需要把函数本身添加到字典里,而不是它们的结果。
如果想支持可变参数,可以使用 lambda 表达式或者 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
函数)后再去调用它。