reduce
函数如何在python3中使用三个参数而不是两个参数。
所以,对于两个,
tup = (1,2,3)
reduce(lambda x, y: x+y, tup)
我得到了这个。这只是总结tup
中的所有元素。但是,如果你给reduce函数三个参数,如下所示,
tup = (1,2,3)
reduce(lambda x, y: x+y, tup, 6)
这会给你一个12
的值。
我检查了python3的文档,它说第三个参数是初始化器。那就是说,如果没有插入第三个参数,那么默认初始化器是什么?
答案 0 :(得分:15)
如果省略第三个参数,则tup
中的 first 值将用作初始值。
或者,换句话说,reduce()
将可选的第3个参数放在第二个参数的值之前(如果存在)。
此外,这意味着如果第二个参数是空序列,则第三个参数用作默认值,就像第二个参数只有一个元素一样(和没有显式的初始化参数),将是默认的返回值。
functools.reduce()
documentation包含函数的Python版本:
def reduce(function, iterable, initializer=None):
it = iter(iterable)
if initializer is None:
value = next(it)
else:
value = initializer
for element in it:
value = function(value, element)
return value
请注意,initializer
(如果不是None
)用作第一个值而不是iterable
中的第一个值。
答案 1 :(得分:0)
reduce 可选的第三个参数:
>>> import functools
>>> test = []
>>> functools.reduce((lambda x,y: x+y), test, "testing")
答案 2 :(得分:0)
提供一个元组作为第三个参数,我们将能够通过减少多个值来计算和返回。
from functools import reduce
def mean(my_list): # == sum(my_list) / len(my_list)
return (lambda x: x[0]/x[1]) (reduce(lambda x, y : (x[0]+y, x[1]+1),
my_list, (0, 0,)))