Python 里面的reduce函数和lambda
来源:互联网 发布:linux中ftp配置 编辑:程序博客网 时间:2024/05/19 14:18
a = [2,22,222]Sn = reduce(lambda x,y:x+y,a)print "计算和为:",Sn
其中reduce函数是python中的一个二元内建函数,它可以通过传给reduce中的函数(必须是二元函数)依次对数据集中的数据进行操作。例如上述代码传给reduce的函数是做加法,数据集是a,那么reduce函数的作用就是将数据集中的数据依次相加,最后打印出的结果就是246。
函数语法: 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返回的都是第一个元素的值。
看例子:
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了凡是要对一个集合进行操作的,并且要有一个统计结果的,能够用循环或者递归方式解决的问题,一般情况下都可以用reduce方式实现。在python 3.0.0.0以后, reduce已经不在built-in function里了, 要用它就得from functools import reduce。
而其中的lambd表达式是一种精简函数的表达方法,省略了函数的定义,命名等问题。
lambda表达式是起到一个函数速写的作用。允许在代码内嵌入一个函数的定义。
如下函数,定义了一个lambda的表达式,求三个数的和:
f = lambda x,y,z:x+y+xprint f(1,2,3)
>>>> 4
f = lambda x,y,z:x+y+zprint f(1,2,3)
>>>> 6
用lambda表达式求n的阶乘:
n = 5print reduce(lambda x,y:x*y,range(1,n+1))
>>>> 120
lambda表达式也可以用在def函数中:
def action(x): return lambda y:x+ya = action(2)print a(22)
>>>> 24
这里定义了一个action函数,返回了一个lambda表达式。其中lambda表达式获取到了上层def作用域的变量名x的值。
a是action函数的返回值,a(22),即是调用了action返回的lambda表达式。
这里也可以把def直接写成lambda形式。如下:
b = lambda x:lambda y:x+ya = b(2)print a(22)#print (b(2))(22)
>>>> 24
以上是我在学习Python遇到对reduce和lambda不懂的时候,百度所得,如有错误,还请指正。
reduce的知识点出处:http://blog.csdn.net/dragonfli_lee/article/details/52301561
lambda的出处:点击打开链接
- Python 里面的reduce函数和lambda
- Python lambda和reduce函数
- python中reduce函数和lambda表达式的学习
- python的reduce,lambda,和排序
- python的reduce,lambda,和排序
- python中的lambda匿名函数以及针对序列的内建函数map、filter和reduce
- python学习中的reduce()函数和lambda表达式
- Python:通过计算阶乘来学习lambda和reduce这两个函数的使用
- Python:通过计算阶乘来学习lambda和reduce这两个函数的使用
- python: reduce()函数、lambda函数、map()函数
- python的lambda表达式 内建函数filter map reduce
- python的lambda、filter、map、reduce、zip函数
- [Python] 函数lambda(), filter(), map(), reduce()
- [Python] 函数lambda(), filter(), map(), reduce()
- python中的函数:filter/map/reduce/lambda
- python 内置函数filter, lambda, map, reduce
- python函数lambda(), filter(), map(), reduce()
- Python 内置函数 lambda、filter、map、reduce
- Git for windows 码云
- android按键监听事件
- SQL中调用存储过程
- jetty多端口启动工程;sqlite导出二进制文件
- dwg文件转为jpg怎么转换好
- Python 里面的reduce函数和lambda
- nodejs 2 hello world!
- flask+ highcharts实现报表转换成趋势图(1)
- matlab学习--插值和拟合
- error: insufficient permissions for device(解决adb shell问题)<转载>
- 利用HOG特征进行人体检测
- tomcat 在eclipse中可以启动,独立不能启动
- 剑指offer-31:连续子数组的最大和
- 【C++】联发科初赛四题《求最大最小数》