You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 17:24:03