<lambda>()需要1个位置

时间:2017-12-06 05:59:48

标签: python lambda

我正在练习使用带有lambda函数的functools.reduce()函数。我遇到的问题是我一直收到错误。这是我的代码:

>>> from functools import reduce
>>> import math
>>> l = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
>>> reduce( (lambda x: math.sqrt(x)), l )

这是输出:

TypeError: <lambda>() takes 1 positional argument but 2 were given

我已经移动了括号,但似乎没有任何效果。出于某种原因,这段代码运行得很好:

>>> from functools import reduce
>>> reduce( (lambda x, y: x * y), [1, 2, 3, 4] )
24
>>> reduce( (lambda x, y: x / y), [1, 2, 3, 4] )
0.041666666666666664

但除了第二个例子有第二个参数y之外,我看不出任何区别。任何人都可以就我收到此错误的原因提出任何建议吗?

1 个答案:

答案 0 :(得分:2)

正确的语法是:

reduce(lambda acc, x: math.sqrt(x), l)

传递给lambda的{​​{1}}需要两个参数:累积结果和当前值。