Python函数式编程:内置函数reduce 使用说明

时间:2023-01-26 11:15:28

一、概述

reduce操作是函数式编程中的重要技术之一,其作用是通过对一个集合的操作,可以从中生成一个值。比如最常见的求和,求最大值、最小值等都是reduce操作的典型例子。python通过内置reduce函数对reduce操作提供了很好的支持。

函数语法:  reduce(function, iterable[,initializer])

函数参数含义如下:

1、function 需要带两个参数,1个是用于保存操作的结果,另一个是每次迭代的元素。

2、iterable 待迭代处理的集合

3、initializer 初始值,可以没有。

reduce函数的运作过程是,当调用reduce方法时:

1、如果存在initializer参数,会先从iterable中取出第一个元素值,然后initializer和元素值会传给function处理;

接着再从iterable中取出第二个元素值,与function函数的返回值 再一起传给function处理,以此迭代处理完所有元素。最后一次处理的function返回值就是reduce函数的返回值。

2、如果不存在initializer参数,会先从iterable中取出第一个元素值作为initializer值,然后以此从iterable取第二个元素及以后的元素进行处理。特殊情况下,如果集合只有一个元素,则无论function如何处理,reduce返回的都是第一个元素的值。

下面我们通过具体的例子来说明。

二、案例

例1:求和

reduce(lambda re,x:re+x,[2,4,6])

结果是12。 这里我们用的是lambda表达式(匿名函数),带两个参数,re就是指的是每次操作后的返回值,这里没带initializer参数,参数x就是代表集合中的元素。

第一轮操作时,re的初始值为第一个元素为2,x为第二个元素4, 运算后re的结果是6.

第二轮操作时,re的值就是上次的结果6,x的值为6,这样结果为12.

因为只有三个元素,又没有initializer参数,所以只会执行两轮。

reduce(lambda re,x:re+x,[2,4,6],10)

结果是22. 这个例子传入了初始化参数10 ,这样re的初始化值为10.

有三个元素,需要操作三轮,结果就是22了。

例2:计算阶乘

reduce(lambda re,x:re*x,range(1,6))

结果为120.  range(1,6)的结果是列表[1,2,3,4,5] , 上面的运算就是计算这些元素的乘积。

三、小结

reduce函数,本质上就是通过传入一个函数和初始值,不断的对集合中的每个元素进行迭代运算,每次运算的结果都作为第二次运算的参数。

和最后一个元素的运算结果作为reduce函数的返回值。