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

Python中如何将接收函数返回值为参数的函数封装为可调用变量

实现multiply_add函数的简便方案

现有函数

def add(*numbers, squared=False):
    return (sum(numbers) ** 2) if squared else sum(numbers)

def multiply(*numbers, half=False):
    mult = 1
    for i in numbers:
        mult *= i
    return (mult / 2) if half else mult

需求

需要定义multiply_add变量作为函数调用,调用时传入add的参数和multiply的其他参数,执行逻辑为:先通过add得到结果,再将该结果作为multiply的首个参数执行运算。

示例调用及预期:

# 调用示例
multiply_add((5, 3, 2), 7, half=True)
# 预期结果:35.0(add计算5+3+2=10,10*7=70后除以2得35)

希望用functools.partial这类简便方式实现,而非自定义函数。

解决方案

直接用lambda封装(最简便)

functools.partial更适合固定参数绑定,而这里需要动态先执行add生成参数再传给multiply,用lambda直接封装逻辑更直观:

# 定义multiply_add
multiply_add = lambda add_nums, *mult_rest, **mult_kwargs: multiply(add(*add_nums), *mult_rest, **mult_kwargs)

# 测试
print(multiply_add((5, 3, 2), 7, half=True))  # 输出35.0

结合partial的实现(如果一定要用partial)

本质还是用lambda处理参数转换,再结合partial完成绑定:

from functools import partial

multiply_add = lambda add_nums, *rest, **kwargs: partial(multiply, add(*add_nums))(*rest, **kwargs)

# 测试同样有效
print(multiply_add((5, 3, 2), 7, half=True))  # 35.0

扩展:支持add的关键字参数

如果需要传递add的squared参数,可以调整lambda来接收相关参数:

multiply_add = lambda add_nums, *mult_rest, add_kwargs=None, **mult_kwargs: multiply(add(*add_nums, **(add_kwargs or {})), *mult_rest, **mult_kwargs)

# 测试带squared的场景
print(multiply_add((5,3,2), 7, add_kwargs={"squared": True}, half=True))  # 输出350.0

内容的提问来源于stack exchange,提问作者Aleks K.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 02:50:27