use*_*497 3 python reduce functional-programming fold higher-order-functions
我对 Python 比较陌生,并且在
使用Folds或更具体地说reduce()是“初始化程序”参数时遇到了问题
例如 reduce(function, iterable[, initializer])
这里是功能...
>>> def x100y(x,y):
... return x*100+y
Run Code Online (Sandbox Code Playgroud)
有人可以解释为什么 reduce() 产生 44 ...
>>> reduce(x100y, (), 44)
44
Run Code Online (Sandbox Code Playgroud)
或者为什么它在这里产生 30102 ......
>>> reduce(x100y, [1,2], 3)
30102
Run Code Online (Sandbox Code Playgroud)
从文档:
减少(功能,可迭代[,初始化程序])
将两个参数的函数从左到右累加到iterable的项上,从而将iterable减少到单个值。例如,
reduce(lambda x, y: x+y, [1, 2, 3, 4, 5])计算((((1+2)+3)+4)+5)。左参数 x 是累积值,右参数 y 是可迭代对象的更新值。如果存在可选的初始化器,它在计算中放在可迭代项的前面,并在可迭代项为空时作为默认值。如果没有给出初始化程序并且 iterable 只包含一个项目,则返回第一个项目。
初始值设定项在您的可迭代对象中作为元素 0 放置,如果您的可迭代对象中没有元素,则返回它。(所以这就是你得到 44 的原因)
此外,x100y 不是有效的 Python 函数。如果你想把它变成一个有效的 python 函数,你必须这样做
reduce(lambda x,y: x*100*y,[1,2],3)
Run Code Online (Sandbox Code Playgroud)
这相当于
(3*100*1)*100*2 应该给出 60000(为什么你得到你所拥有的值可能是因为错误)
关于 lambda 的文档在这里