python中的reduce(),也是很好理解的。(注意,python 3.x中,reduce()函数已经被从全局名字空间里移除了,它现在被放置在fucntools模块里)我们,可以这样形象的去理解它:
reduce(func, [1, 2, 3]) == func(func(1, 2), 3)
其中func是二元函数,处理后,返回一个值。
我们可以试着用纯Python来实现reduce(),它可能是这样:
def reduce (bin_func, seq, init = None):
lseq = list(seq)
if init is None:
res = lseq.pop(0)
else:
res = init
for item in lseq:
res = bin_func(res, item)
return res
解释一下的话就是这样:
如果初始化器是空的话,就从seq中取出两个数,传进func函数中,返回一个值x,然后取出seq中余下的元素的第一个,与x一起传进func,func返回y,然后y与seq中余下的元素的第一个一起传进func,然后返回一个值。。。如此这样循环,直到seq的最后一个元素,得到结果。像这样:
from functools import reduce
print(reduce((lambda x, y : x + y), range(5)))
其实计算的就是0 + 1 + 2 + 3 + 4的值,结果是
10
如果初始化器不为空的话,在seq中取出第一个元素,与初始化器一起传进func,然后取第二个数,传进,如此,直到最后一个元素,得到结果。像这样:
from functools import reduce
print(reduce((lambda x, y : x + y), range(5), 10))
计算的就是 10 + 0 + 1 + 2 + 3 + 4的值,结果是
20