我正在练习使用带有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之外,我看不出任何区别。任何人都可以就我收到此错误的原因提出任何建议吗?
答案 0 :(得分:2)
正确的语法是:
reduce(lambda acc, x: math.sqrt(x), l)
传递给lambda
的{{1}}需要两个参数:累积结果和当前值。