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

如何创建返回多函数乘积的函数:支持可变长度与不同参数

实现可变函数列表的乘积函数

这需求挺实用的,我来给你写一个符合要求的实现,还会帮你拆解关键逻辑~

首先直接上代码,你可以直接拿去用:

def f(a, b, **kwargs): return a + b
def g(c, d, **kwargs): return c + d

def product_function(function_list, **kwargs):
    def product(*args, **combined_kwargs):
        # 合并初始化时传入的kwargs和调用时的kwargs,调用时的参数优先级更高
        merged_kwargs = {**kwargs, **combined_kwargs}
        result = 1
        for func in function_list:
            # 逐个调用函数并累乘结果
            result *= func(*args, **merged_kwargs)
        return result
    return product

核心逻辑解释

  1. 内部嵌套函数:product_function返回一个名为product的嵌套函数,这个函数就是最终用来计算乘积的入口。
  2. 参数兼容处理:
    • 用*args和**combined_kwargs捕获所有调用时传入的位置参数和关键字参数,确保能适配列表中每个函数的不同参数需求。
    • 合并product_function初始化时传入的kwargs和调用时的combined_kwargs,支持提前设置默认参数,同时允许调用时覆盖。
  3. 累乘计算:初始化结果为1(符合数学上空乘积的定义),遍历函数列表逐个调用并累乘结果。

测试示例

你可以这样验证功能:

# 创建乘积函数
my_product = product_function([f, g])
# 传入所有必要参数调用
print(my_product(a=1, b=2, c=3, d=4))  # 输出 3*7=21

# 也可以提前设置部分默认参数
my_product_with_default = product_function([f, g], a=10, b=20)
print(my_product_with_default(c=3, d=4))  # 输出 30*7=210

额外注意点

  • 如果函数列表为空,当前实现会返回1(数学空乘积规则)。如果你希望这种情况抛出错误,可以在product函数开头加判断:
    if not function_list:
        raise ValueError("Function list cannot be empty")
    
  • 调用最终生成的函数时,必须传入所有子函数需要的参数,否则会触发参数不匹配的报错。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 09:38:48