参考链接: Python中的reduce

a = [2,22,222]

Sn = reduce(lambda x,y:x+y,a)

print "计算和为:",Sn

reduce() 函数会对参数序列中元素进行累积。

函数将一个数据集合(链表,元组等)中的所有数据进行下列操作:用传给 reduce 中的函数 function(有两个参数)先对集合中的第 1、2 个元素进行操作,得到的结果再与第三个数据用 function 函数运算,最后得到一个结果。

其中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+x

print f(1,2,3)

>>>> 4

f = lambda x,y,z:x+y+z

print f(1,2,3)

>>>> 6

用lambda表达式求n的阶乘:

n = 5

print reduce(lambda x,y:x*y,range(1,n+1))

>>>> 120

lambda表达式也可以用在def函数中:

def action(x):

return lambda y:x+y

a = 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+y

a = b(2)

print a(22)#print (b(2))(22)

>>>> 24

以上是我在学习Python遇到对reduce和lambda不懂的时候,百度所得,如有错误,还请指正。

[转载] Python 中reduce()与lambda函数详解相关推荐

  1. python平方数迭代器_对python中的高效迭代器函数详解

    python中内置的库中有个itertools,可以满足我们在编程中绝大多数需要迭代的场合,当然也可以自己造轮子,但是有现成的好用的轮子不妨也学习一下,看哪个用的顺手~ 首先还是要先import一下: ...

  2. python中plt定义,对Python中plt的画图函数详解

    1.plt.legend plt.legend(loc=0)#显示图例的位置,自适应方式 说明: 'best' : 0, (only implemented for axes legends)(自适应 ...

  3. python中内置数学函数详解和实例应用之三角函数_初级阶段(二)

    学习目标: 利用python进行三角函数运算 学习内容: python中的三角函数合集和应用实例 转载请注明出处! 学习产出: 环境:python 3.7, 利用shell进行实例操作. Note: ...

  4. python中文件读写--open函数详解

    python中open函数详解 在python中文件的读取分为三步走: 读:打开文件 -> 读文件 -> 关闭文件 (有点像把大象放进冰箱需要几步?的问题) 1.open函数 open函数 ...

  5. [转载] python中for语句用法_详解Python中for循环的使用_python

    参考链接: 在Python中将else条件语句与for循环一起使用 这篇文章主要介绍了Python中for循环的使用,来自于IBM官方网站技术文档,需要的朋友可以参考下 for 循环 本系列前面 &q ...

  6. [转载] python中的type和object详解

    参考链接: Python object() 这篇主要描述Python的新风格对象(new-style objects),如下: 和分别是什么? 用户自定义的类和实例之间是怎么联系的?它们和内置类型又是 ...

  7. python中input()函数详解

    1.input()函数赋值后数据在python内部的类型. if __name__=="__main__":a=input()print(type(a))b=input()prin ...

  8. python中内置数学函数详解和实例应用之三角函数曲线_初级阶段(三)

    学习目标: 利用matplotlib 和 numpy 画三角函数曲线 学习内容: 正弦,余弦,正切,余切函数曲线 双曲正弦,双曲余弦,双曲正切,双曲余切函数曲线 反正弦,反余弦,反正切,反余切函数曲线 ...

  9. Python中random模块生成随机数详解

    Python中random模块生成随机数详解 本文给大家汇总了一下在Python中random模块中最常用的生成随机数的方法,有需要的小伙伴可以参考下 Python中的random模块用于生成随机数. ...

最新文章

  1. 这5个机器学习项目你不可错过!(附代码)
  2. SAP MM 为MB51报表增加查询字段
  3. 【MM模块】Document Release 订单下达(审批)
  4. 推荐15个在线多媒体(图片、音频、视频)编辑器
  5. Hi3516A开发--目录分析
  6. 修改某个用户名和密码
  7. eclipse android maven插件,添加Eclipse“Android Library”项目并通过Maven构建
  8. python重复输入上面指令_stdin stdout python:如何重复使用同一输入文...
  9. JAVA面试题:HashMap和Hashtable的区别
  10. 国家高性能计算环境的虚拟数据空间运行支撑技术研究
  11. 离线安装 KubeSphere 2.1.1 与 Kubernetes
  12. Linux内核分析 - 网络[八]:IP协议
  13. 整理: JAVA错误处理集锦
  14. 【Docker】使用介绍
  15. 在线制作流程,数据库模型,网络架构图,你所不知道的工具使用-Freedgo Design
  16. 水平放滑轮组计算机械效率,滑轮组机械效率     王凤霞
  17. 服务器系统2003出入站,独立服务器win2003系统站点常见问题解答
  18. 马斯克、李彦宏、姚期智等云端纵论AI,他们都说了什么?
  19. 东航mu座位分布图机翼_东航MU2357飞机座位大概几号座位在飞机机翼边上
  20. tomcat下载与安装win11

热门文章

  1. layer 父弹出框上弹出子弹框窗体大小问题
  2. JSP→Javabean简介设计原则、JSP动作、Javabean三个动作、Javabean四个作用域范围、Model1简介弊端、JSP状态管理、include动作指令、forword动作、param
  3. visualmap超过范围改变颜色_换种颜色,换种心情——车身改色
  4. java系统缓存应用_著名java开源缓存系统 【zz】
  5. oracle查看所有用户6,oracle 查看 用户 用户权限 用户表空间 用户默认表空间
  6. 计算机网络—停止等待协议(思维导图)
  7. 计算机网络—数据链路层的流量控制与可靠传输机制(思维导图)
  8. Unity3D基础28:Invoke计时函数与碰撞销毁
  9. 2017百度之星初赛:A-1005. 今夕何夕
  10. matlab imdilate