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

Python动态调用函数及高效传递参数的实现方法

推荐问题标题:Python 动态调用指定函数并批量传递公共参数的实现方案

方案1:匹配你设想的参数封装实现

你设想的传参模式可以通过SimpleNamespace把字典转为支持属性访问的对象,再配合函数映射表实现无硬编码判断的调用:
首先导入所需工具:

from types import SimpleNamespace

然后维护一个函数名到实际函数对象的映射表,后续新增函数只需要在这个表中添加对应关系即可:

func_map = {
    "some_function": some_function,
    "another_function": another_function
}

循环调用的逻辑实现如下:

for arguments in argument_list:
    # 获取目标函数
    current_func = func_map[arguments["function"]]
    # 取出待遍历的名称列表
    name_list = arguments.pop("names")
    # 遍历每个名称执行调用
    for name in name_list:
        # 合并名称和其他固定参数,转为属性访问对象
        param = SimpleNamespace(name=name, **arguments)
        current_func(param)

这个方案完全匹配你设想的函数内部用param.属性名取值的写法,不需要修改你已经写好的函数定义。

方案2:更轻量化的参数解包实现

如果你不需要强制把参数封装为单对象,可以用位置参数解包的方式,连原函数定义都不需要修改:
首先调整参数列表结构,直接把函数对象、待遍历名称、固定参数分开存储:

argument_list = [
    {"func": some_function, "names": ["first", "second"], "fixed_args": (1, 2)},
    {"func": another_function, "names": ["first"], "fixed_args": (3, 1, 5)}
]

调用逻辑只需要两行循环即可完成:

for item in argument_list:
    for name in item["names"]:
        item["func"](name, *item["fixed_args"])

该方案后续新增函数时,只需要在参数列表中添加对应配置项即可,不需要额外维护映射表,代码量更低。

内容的提问来源于stack exchange,提问作者Paul Brink

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.09 14:30:01