Python中的reduce函数是经常和map,filter一起被提到的函数,但是reduce的工作原理却不是那么直观,我们这里就来详细讲解一下这个函数。
首先先来看一下reduce函数的用法
import functools
functools.reduce(lambda x,y: x+y, [1, 2, 3, 4])
reduce接受的第一个参数是一个函数,第二个参数是一个列表。上面我们通过reduce函数来作了一个求和的运算,我们这里计算的是[1, 2, 3, 4]这个列表中所有元素的和。
需要注意的是,reduce的第一个参数是一个函数,这个函数接受两个参数,像上面的lambda函数有两个参数x和y,这两个参数分别代表什么意思呢?这也是很多人感到困惑的地方。这个得从reduce的工作原理说起。
reduce工作原理
对于我们上面的代码,reduce的工作原理是像下面这张图所示的
首先,reduce会计算列表中第一个和第二个元素的和,然后把这个结果和第三个元素相加,然后再把新的这个计算结果和第四个元素相加,每一次都是上一次计算的结果和下一个元素相加,所以这样就实现了求和运算。
每一次计算中,x和y分别被赋予了什么值,我们可以定义下面一个函数来看一下
def func(x, y):
print(x, y)
然后我们把这个函数传给reduce函数的第一个参数,像下面这样
functools.reduce(func, [1, 2, 3, 4])
执行上面的代码,会看到如下的输出