Python不使用if-else如何为函数字典中不同参数的函数传参?
实现方案
方案1:提前绑定函数与对应参数(推荐)
直接改造函数字典的存储结构,每个函数对应存储其需要的参数元组,执行时直接解包传入即可,无额外依赖,逻辑清晰:
def func1(var1,var2,var3): return var1+var2+var3 def func2(var1,var2,var3,var4): return var1+var2+var3+var4 def func3(var1,var2): return var1 + ' ' + var2 var1 = 1 var2 = 2 var3 = 3 var4 = 4 # 改造字典,每个条目存储函数+对应参数 functs_to_execute = { 'func1': (func1, (var1, var2, var3)), 'func2': (func2, (var1, var2, var3, var4)), 'func3': (func3, (str(var1), str(var2))) } fs = ['func1', 'func2', 'func3'] # 自定义要执行的函数列表 for f in fs: current_funct, args = functs_to_execute.get(f) # 直接解包参数传入 res = current_funct(*args) # 按需处理返回值即可 print(res)
方案2:动态获取函数参数数量匹配入参
如果需要动态适配参数,不需要提前绑定,可以借助inspect模块获取函数的参数个数,自动匹配对应数量的入参:
import inspect def func1(var1,var2,var3): return var1+var2+var3 def func2(var1,var2,var3,var4): return var1+var2+var3+var4 def func3(var1,var2): return str(var1) + ' ' + str(var2) functs_to_execute = { 'func1': func1, 'func2': func2, 'func3': func3 } var1 = 1 var2 = 2 var3 = 3 var4 = 4 # 按函数参数定义的顺序存储所有可用变量 all_args = [var1, var2, var3, var4] fs = ['func1', 'func2', 'func3'] for f in fs: current_funct = functs_to_execute.get(f) # 获取函数的位置参数个数 arg_count = len(inspect.signature(current_funct).parameters) # 取对应数量的参数传入 res = current_funct(*all_args[:arg_count]) # 按需处理返回值即可 print(res)
- 方案2需要保证全局参数的存储顺序和所有函数的参数定义顺序一致,否则会出现参数传错的问题。
- 示例中func3需要字符串类型参数,可根据需求提前做类型转换。
内容的提问来源于stack exchange,提问作者xion
相关产品推荐
相关产品推荐

