浅谈python之高阶函数和匿名函数
map()
map()函数接收两个参数,一个是函数,一个是Iterable,map将传入的函数依次作用到序列的每个元素,并把结果作为新的Iterator返回。
deffunc(x): returnx*x r=map(func,[1,2,3,4,5]) print(type(r)) r=list(r) print(r)
输出结果:
[1,4,9,16,25]
可以看出,map让函数func作用于列表的每一项,使列表的每一项都被函数func执行一次,即列表的每一项都进行平方。其返回值是map类型。
reduce()
reduce函数必须接收两个参数,把一个函数作用在一个序列[x1,x2,x3,...]上,然后再把结果继续和序列的下一个元素做累积计算。
fromfunctoolsimportreduce deffn(x,y): returnx*10+y f=reduce(fn,[1,3,5,7,9])#把序列变为整数 print(f) print(type(f))
输出结果:
13579
和map不同,虽然reduce也是作用于每个元素,但是reduce的作用结果要用在下次和另一个元素做累积计算。
map()和reduce()的结合使用
fromfunctoolsimportreduce deffn(x,y): returnx*10+y defchar2num(s): digits={'0':0,'1':1,'2':2,'3':3,'4':4,'5':5,'6':6,'7':7,'8':8,'9':9} returndigits[s] f=reduce(fn,map(char2num,'13579')) print(f)
输出结果:
13579
可以将字符串类型转换为int类型
filter()
filter()函数用于过滤序列,接收一个函数和一个序列。和map()不同的是,filter()把传入的函数依次作用于每个元素,然后根据返回值是True还是False决定保留还是丢弃该元素。
defnot_empty(s): returnsands.strip()#不能直接写s.strip() f=filter(not_empty,['A','','B',None,'C','']) print(type(f)) print(list(f))
输出结果:
['A','B','C']
sorted()
sorted()函数也是一个高阶函数,在列表的学习中初步接触了sorted(),但其实它还可以接收一个key函数来实现自定义的排序。
key指定的函数将作用于被排序对象的每一个元素上,并根据key函数返回的结果进行排序。
l=sorted([36,5,-12,9,-21],key=abs)#按绝对值大小排序 print(l) s=sorted(['bob','about','Zoo','Credit'])#按ASCII大小排序 print(s) sl=sorted(['bob','about','Zoo','Credit'],key=str.lower)#忽略大小写排序 print(sl) sr=sorted(['bob','about','Zoo','Credit'],key=str.lower,reverse=True)#反向排序 print(sr)
输出结果:
[5,9,-12,-21,36]
['Credit','Zoo','about','bob']
['about','bob','Credit','Zoo']
['Zoo','Credit','bob','about']
同样的,sorted()也可以对元组和字典进行排序
fromoperatorimportitemgetter#需要使用operator模块 L=[('Bob',75),('Adam',92),('Bart',66),('Lisa',88)] print(sorted(L,key=itemgetter(0)))
输出结果:
[('Adam',92),('Bart',66),('Bob',75),('Lisa',88)]
当然,也能以values的值来排序,对字典的排序与元组类似,但返回值不同。
fromoperatorimportitemgetter dic={"Bob":75,"Adam":92,"Lisa":88} print(sorted(dic,key=itemgetter(0))) print(sorted(dic,key=itemgetter(1)))
输出结果:
['Adam','Bob','Lisa']
['Adam','Lisa','Bob']
可以看到,不管是以key值进行排序,还是以value值进行排序,排序结果只返回对应顺序的key值。
匿名函数
f=list(map(lambdax:x*x,[1,2,3,4,5,6,7,8,9])) print(f)
输出结果:
[1,4,9,16,25,36,49,64,81]
上面就是一个匿名函数的使用,匿名函数lambdax:x*x实际上就是:
deff(x): returnx*x
只是在这里没有显式地定义函数,这样因为函数没有名字,不必担心函数名冲突,而且代码看起来也简洁。
以上所述是小编给大家介绍的python之高阶函数和匿名函数详解整合,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对毛票票网站的支持!
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。