Python:了解reduce()的'initializer'参数

时间:2013-10-07 23:37:47

标签: python functional-programming reduce fold higher-order-functions

我对Python比较陌生,而且遇到麻烦 用折叠或更具体地说,reduce()的'初始化'参数

e.g。 reduce(function, iterable[, initializer])

这是函数......

>>> def x100y(x,y):
...     return x*100+y

有人可以解释为什么reduce()会产生44 ......

>>> reduce(x100y, (), 44)
44

或者为什么它在这里产生30102 ......

>>> reduce(x100y, [1,2], 3)
30102

1 个答案:

答案 0 :(得分:3)

来自文档:

  

reduce(function, iterable[, initializer])

     

应用两个功能     参数累加到可迭代的项目,从左到右,     以便将迭代减少到单个值。例如,     reduce(lambda x, y: x+y, [1, 2, 3, 4, 5])计算     ((((1+2)+3)+4)+5)。左参数x是累计值和     正确的参数y是迭代的更新值。如果     可选的初始化程序存在,它放在项目之前     在计算中可迭代,并在迭代时用作默认值     是空的。如果没有给出初始化器,并且iterable只包含一个     item,返回第一个项目。

初始值设定项在您的iterable中作为元素0放置,如果您的iterable中没有元素,则返回它。 (所以这就是你得到44的原因)

此外,x100y不是有效的python函数。如果你想把它变成一个有效的python函数,你就必须这样做

reduce(lambda x,y: x*100*y,[1,2],3)

相当于

(3 * 100 * 1)* 100 * 2应该给60000(为什么你得到的价值可能是因为错误)

有关lambda的文档是here