Python Lambda函数如何传递多个值或*args可变参数?
实现逻辑
Python中lambda表达式和def定义的普通函数遵循完全一致的参数规则,不需要额外引入工具或做特殊语法改造,直接使用Python原生的可变位置参数语法即可实现多值传入:在参数前加*做标识,所有传入的位置参数会自动打包为元组传入函数体,只需在函数体内遍历该元组完成目标计算即可。
这种写法完全兼容原有单参数调用逻辑,旧的调用代码无需修改。
具体解决方案
以你最初的「计算输入值平方」逻辑为例,如果需要对每个传入的参数分别求平方、返回结果序列,实现代码如下:
# *nums 接收任意数量的位置参数,自动打包为元组 a = lambda *nums: tuple(x ** 2 for x in nums) # 多参数形式调用 print(a(2, 3, 4, 5))
运行输出:
(4, 9, 16, 25)
如果需要实现其他计算逻辑,比如计算所有传入值的平方和,只需要调整函数体内的计算规则即可:
a = lambda *nums: sum(x ** 2 for x in nums) print(a(2, 3, 4, 5)) # 输出: 54
- 可变参数不限制传入参数的个数,传入单个值时行为和你最初写的单参lambda完全一致,
a(2)依然会返回4 - 不需要手动把参数包成列表、字典再传入,直接用
*可变参数语法是性能最高、写法最简洁的实现方式
内容的提问来源于stack exchange,提问作者Prince
相关产品推荐
相关产品推荐

