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

Python如何向目标函数传递变量和带额外参数的自定义函数

问题根因

现有general_operation调用传入的func时仅传递了x、y两个参数,无法满足带额外入参的自定义函数的调用要求,有两类成熟实现方案:


方案1:修改通用函数支持额外参数透传

直接调整general_operation的定义,新增可变参数用于接收func的额外入参,调用时自动透传,适配性最好:

def general_operation(x, y, step, func, *func_args, **func_kwargs):
    """
    func is a function which expects at least x & y as arguments,
    but it can expect more arguments.
    """
    number_of_iterations = int((y - x) / step)
    solutions = []
    for i in range(number_of_iterations):
        # 透传所有额外参数给自定义函数
        solutions.append(func(x, y, *func_args, **func_kwargs))
    return solutions

调用示例:

# 无额外参数的调用方式完全不变
solutions_1 = general_operation(x, y, step, funza)
# 位置参数传入additional=1
solutions_2 = general_operation(x, y, step, gunza, 1)
# 关键字参数传入additional=2,更清晰避免参数错位
solutions_3 = general_operation(x, y, step, gunza, additional=2)

方案2:不修改通用函数,预先绑定自定义函数的额外参数

如果不方便改动general_operation的原有定义,可以通过匿名函数或者functools.partial提前把额外参数绑定到func上,无需调整原有通用函数逻辑:

用lambda实现

# 预先绑定additional=1
solutions_2 = general_operation(x, y, step, lambda x,y: gunza(x,y, 1))
# 预先绑定additional=2
solutions_3 = general_operation(x, y, step, lambda x,y: gunza(x,y, 2))

用functools.partial实现

from functools import partial

solutions_2 = general_operation(x, y, step, partial(gunza, additional=1))
solutions_3 = general_operation(x, y, step, partial(gunza, additional=2))

注意:你原代码中solutions_2的调用漏传了step参数,实际调用时需要补上否则会报参数数量不匹配错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.09 08:36:01