匿名函数及高阶函数_第1页
匿名函数及高阶函数_第2页
匿名函数及高阶函数_第3页
匿名函数及高阶函数_第4页
匿名函数及高阶函数_第5页
已阅读5页,还剩6页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

《Python开发技术应用》44匿名函数及高阶函数什么是匿名函数使用Python写一些执行脚本时,使用匿名函数可以省去定义函数的过程,让代码更加精简。对于一些抽象的,不会别的地方再复用的函数,有时候给函数起个名字也挺麻烦,使用匿名函数不需要考虑命名的问题,并且可以让代码更容易理解。匿名函数使用关键字lambda来定义,语法格式:lambdaargs:expression匿名函数和add()等价的匿名函数:>>>f1=lambdax,y:x+y假如我们需要一个加法函数:>>>defadd(x,y)...returnx+y匿名函数的主要意义在于函数速写,它也常常在高阶函数中作为参数来使用。如果不给它分配名称,那么就需要立即调用,因为它是匿名的,所以在后续代码中无法访问,就不能再调用。>>>(lambdax,y:x+y)(3,4)7匿名函数高阶函数高阶函数的定义:函数的参数(同时也是函数要处理的对象)是其他函数。常用的高阶函数包括map()、reduce()、filter()、sorted()等。map()函数原型:

map(function,iterable,...)function:一个函数的元数据引用iterable:一个或多个序列map()会根据提供的函数对指定序列做映射,即以参数序列中的每一个元素调用function函数,返回一个map对象,可以转换成列表,也可以直接迭代访问。map()函数假设我们有一个函数f(x)=x2,要把这个函数作用在一个列表中的各个元素上,用高阶函数map()来实现:map(f(x),list)123456789[]list:149162536496481[]return:

f(x)=x2

deffoo(x):returnx*xm1=map(foo,[1,2,3,4,5,6,7,8,9])print(m1)print(list(m1))执行结果:<mapobjectat0x000002DD762DB8C8>[1,4,9,16,25,36,49,64,81]map()函数如果map()函数的处理函数需要多个参数,那么对应的数据序列也要有多个,例如计算矩形面积需要长和宽相乘,那么就需要一个序列提供长、另一个序列提供宽。>>>list(map(lambdax,y:x*y,[5,12,8],[3,5,6]))[15,60,48]map()函数中的处理函数可以是匿名函数,因此这个计算二次方的例子可以写成以下形式:>>>list(map(lambdax:x*x,[1,2,3,4,5,6,7,8,9]))[1,4,9,16,25,36,49,64,81]map()函数reduce()也是一个常用的高阶函数,由functools模块提供,函数原型:reduce(func,iterable[,initializer])

func是用于处理的函数,该函数要求两个参数和一个返回值;iterable为可迭代对象;initializer是可选的,为初始参数;返回值是函数计算结果。函数将一个数据集合(列表,元组等)中的所有数据进行下列操作:用传给reduce中的函数func(有两个参数)先对集合中的第1、2个元素进行操作,得到的结果再与第三个数据用func函数运算,以此类推,最后得到一个结果。可以认为:reduce(f,[x1,x2,x3,x4])等价于f(f(f(x1,x2),x3),x4)reduce()函数functoools.reduce(f(x),list)123456[]list:return

f(x,y)=x×y2624120720>>>importfunctools>>>functools.reduce(lambdax,y:x*y,range(1,7))720reduce()函数filter()函数主要用于过滤序列,它有以下特性:filter()接收一个函数和一个序列,函数必须是判断型函数,返回True或False;filter()把传入的函数依次作用于序列中的每个元素,然后根据返回值是True还是False决定保留还是丢弃该元素。函数原型:filter(function,iterable)function:判断函数iterable:为可迭代对象返回值是一个filter对象,可以转换为列表,也可以用for循环访问。filter()函数下面举个例子,在一个list中,删掉偶数,只保留奇数:>>>defis_odd(n):...returnn%2==1>>>list(filter(is_odd,[1,2,4,5,6,9,10,15]))[1,5,9,15]再举例把一个序列中的空字符串删掉:>>>defnot_empty(s):...returnsands.strip()>>>

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论