<lambda>() 缺少 1 个必需的位置参数:使用 lambda 'z' 并减少



我试图了解lambdareduce()的工作方式。我尝试了这些示例,但无法理解为什么这给我带来了错误。有人可以解释如何执行它吗?

>>> functools.reduce(lambda x,y:x+y, range(10))
45

这很好。但是当我尝试过时,它给了我错误:

>>> functools.reduce(lambda x,y,z:x+y+z, range(10))
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: <lambda>() missing 1 required positional argument: 'z'

functools.reduce需要两个参数的函数。您不能将lambda x, y, z作为函数传递,因为这是3个参数的函数。(在Python中,调用具有不正确数量的参数的函数是一个错误。functools.reduce将使用只有2个参数而不是3个来调用lambda x, y, z,这是一个错误。)

来自help(functools.reduce)

reduce(...)
    reduce(function, sequence[, initial]) -> value
    Apply a function of two arguments cumulatively to the items of a sequence,
    from left to right, so as to reduce the sequence to a single value.
    For example, reduce(lambda x, y: x+y, [1, 2, 3, 4, 5]) calculates
    ((((1+2)+3)+4)+5).

最新更新