失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > Python中匿名函数与内置高阶函数详解

Python中匿名函数与内置高阶函数详解

时间:2023-08-05 15:40:30

相关推荐

Python中匿名函数与内置高阶函数详解

作者:是甜甜呢

来源:早起Python

Python中匿名函数与内置高阶函数详解

本文带来的是Python中匿名函数与内置高阶函数使用,其他内容将在近期更新完毕,本文目录如下

匿名函数

如果我们需要定义一个特别简单的函数,例如

defadd(a,b):s=a+breturns

这就出现问题了,这么优雅的Python怎么可以出现这种难看的代码呢,有没有办法可以将其简化为1行代码呢?这么优雅的Python肯定有办法将其简化的方法啊!这要用到匿名函数了。Python中使用lambda关键字来创建匿名函数。

lambda[参数1[,参数2,..参数n]]:表达式

示例代码

"""-*-coding:uft-8-*-author:小甜time:/5/23"""news_add=lambdaa,b:a+b#上面的那个等于defnews_add_old(a,b):returna+bx=news_add_old(5,10)y=news_add(5,10)#调用匿名函数print(x,y)#1515

结合内置函数使用

"""-*-coding:uft-8-*-author:小甜time:/5/23"""list1=[{"a":10,"b":20},{"a":20,"b":20},{"a":50,"b":20},{"a":6,"b":20},{"a":9,"b":20}]#那个列表中的a最大max_value=max(list1,key=lambdax:x["a"])print(max_value)#如果用普通的函数写就多了几行deffunc(di):returndi["a"]max_value=max(list1,key=func)#这里不能加()不然就表示调用了print(max_value)

也可以将匿名函数当做参数

deffunc(a,b,fun):s=fun(a,b)returnsz=func(5,10,lambdaa,b:a+b)print(z)#15

注:lambda可以省去定义函数的过程,让代码更加精简,而且不用考虑命名问题,但是在PEP8规范里面是不推荐用lambda这种方式的

内置函数 map( )

map()会根据提供的函数对指定序列做映射,使用方法:

map(function,iterable,...)

第一个参数function以参数序列中的每一个元素调用function函数,第二个参数iterable一个或多个序列。其返回包含每次 function 函数返回值的新列表。

示例代码

"""-*-coding:uft-8-*-author:小甜time:/5/23"""list1=[1,2,4,5,56,12,5,2,34]#生成一个函数deffunc(lt):#将偶数返回,奇数+1返回iflt%2==0:returnltelse:returnlt+1list2=map(func,list1)#千万不能加()#使用lambda关键字list3=map(lambdai:iifi%2==0elsei+1,list1)print(list(list3))#[2,2,4,6,56,12,6,2,34]print(list(list2))#[2,2,4,6,56,12,6,2,34]

reduce( )

reduce() 函数在Python2.x的时候是系统内置的函数,到Python3.x就已经归入functools库里面了。

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

reduce(function,iterable[,initializer])

示例代码

"""-*-coding:uft-8-*-author:小甜time:/5/23"""fromfunctoolsimportreducelist1=[1,2,3,4,5,6,7]value=reduce(lambdax,y:x+y,list1)print(value)#28=1+2+3+4+5+6+7

执行流程即将计算结果存储到x,每次累计。initializer就是设置x的初始值,演示如下‍

filter( )

filter() 函数用于过滤序列,过滤掉不符合条件的元素,返回一个迭代器对象,如果要转换为列表,可以使用 list() 来转换。

该方法接收两个参数,第一个为函数,第二个为序列,序列的每个元素作为参数传递给函数进行判,然后返回 True 或 False,最后将返回 True 的元素放到新列表中。

filter(function,iterable)

sorted( )

sorted()函数对所有可迭代的对象进行排序操作,返回的是一个新的 list.返回重新排序的列表。

sorted(iterable,cmp=None,key=None,reverse=False)

iterable – 可迭代对象。

cmp – 比较的函数,这个具有两个参数,参数的值都是从可迭代对象中取出,此函数必须遵守的规则为,大于则返回1,小于则返回-1,等于则返回0。

key – 主要是用来进行比较的元素,只有一个参数,具体的函数的参数就是取自于可迭代对象中,指定可迭代对象中的一个元素来进行排序。

reverse – 排序规则,reverse = True 降序 , reverse = False 升序(默认)。

示例代码

"""-*-coding:uft-8-*-author:小甜time:/5/23"""students=[{"name":"tom","age":20},{"name":"lucy","age":15},{"name":"lily","age":13},{"name":"mark","age":21},{"name":"jack","age":13},{"name":"steven","age":18},]#找出所有年龄大于18岁学生result=filter(lambdax:x["age"]>18,students)print(list(result))#[{"name":"tom","age":20},{"name":"mark","age":21}]#按照年龄从小到大排序students=sorted(students,key=lambdax:x["age"],reverse=True)#利用keyprint(students)"""[{"name":"mark","age":21},{"name":"tom","age":20},{"name":"steven","age":18},{"name":"lucy","age":15},{"name":"lily","age":13},{"name":"jack","age":13}]"""

---------End---------关注后回复“w”,加我私人微信

分享”和“在看”是更好的支持!

如果觉得《Python中匿名函数与内置高阶函数详解》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。