匿名函数也是函数的一种,不过匿名函数和其他函数不一样,匿名函数只能是一种表达式,不能有return,返回值就是表达式的结果。匿名函数的关键词就是lambda,可以结合其他的函数一起使用,匿名函数的好处就是简单,不需要对函数进行定义,在调用时,只能先赋值给变量后才可以调用匿名函数返回结果。看下面的例子:
#!/usr/bin/python3 #coding:utf-8 #~~~~~~~~~~~~www.wulaoer.org 吴老二个人博客~~~~~~~ def wulaoer(a,b): return a * b wolf = lambda a,b: a * b print("普通函数直接调用,返回结果:",wulaoer(2,7)) print("匿名函数赋值给变量,返回结果:",wolf(2,5))
打印结果:
普通函数直接调用,返回结果: 14 匿名函数赋值给变量,返回结果: 10
这个是普通的匿名函数直接转换,匿名函数只能赋值给变量后才可以调用,不能直接调用,匿名函数只能使用简单的表达式,下面看稍微比较复杂一点的匿名函数表达式的例子:
#!/usr/bin/python3 #coding:utf-8 #~~~~~~~~~~~~www.wulaoer.org 吴老二个人博客~~~~~~~ def devops(x,y): if x > y: return x ** y else: return x / y golong=lambda x,y:x ** y if x > y else x / y print("三元运算函数,,返回结果:",devops(2,7)) print("三元运算函数转成匿名函数,返回结果:",golong(2,7))
打印结果:
三元运算函数,,返回结果: 0.2857142857142857 三元运算函数转成匿名函数,返回结果: 0.2857142857142857
匿名函数在调用的时候判断前面式True,后面是False,所以这个顺序需要表达清楚,lambda相当于函数中的def,x,y相当于函数的参数,后面是函数的表达式,参数和表达式之间使用了":"进行分割,后面就是匿名函数的表达式,匿名函数比较常用,下面看一下匿名函数的使用场景。
匿名函数使用的场景
匿名函数可以接受多个参数,也可以接受其他的函数,这里说的是lambda结合map函数,先看下面的例子:
#!/usr/bin/python3 #coding:utf-8 #~~~~~~~~~~~~www.wulaoer.org 吴老二个人博客~~~~~~~ python3=[1,2,3,4,5,6] for t,i in enumerate(python3): python3[t]=i*i print("for循环遍历列表元素平方:",python3) python3=[1,2,3,4,5,6] DevOps=list(map(lambda x:x*x,python3)) print("匿名函数结合map函数:",DevOps)
打印结果:
for循环遍历列表元素平方: [1, 4, 9, 16, 25, 36] 匿名函数结合map函数: [1, 4, 9, 16, 25, 36]
匿名函数作为一个参数,传到map函数中,直接返回结果,上面赋值给一个变量,不过也不是函数,只是一个变量值。可以直接打印不需要调用。
#!/usr/bin/python3 #coding:utf-8 #~~~~~~~~~~~~www.wulaoer.org 吴老二个人博客~~~~~~~ python3=[1,2,3,4,5] nginx= 1 for i in python3: nginx*=i print("序列累计结果:",nginx) from functools import reduce DevOps = reduce(lambda x,y: x * y ,python3) print("匿名函数结合reduce函数:",DevOps)
打印结果:
序列累计结果: 120 匿名函数结合reduce函数: 120
匿名函数作为一个参数,传入到reduce函数中,对匿名函数返回的结果进行求积。所以,最终reduce的函数会对匿名函数返回的所有序列进行累积计算操作。下面看一下filter函数:
#!/usr/bin/python3 #coding:utf-8 #~~~~~~~~~~~~www.wulaoer.org 吴老二个人博客~~~~~~~ python3=[1,2,3,4,5] DevOps=list(filter(lambda x:x % 2 == 1,python3)) print("只保留奇数:",DevOps) DevOps=list(filter(lambda x:x % 2 == 0,python3)) print("只保留偶数:",DevOps) linux=list(range(100,200)) DevOps=list(filter(lambda x:int(str(x))==int(str(x)[::-1]),linux)) print("匿名函数结合filter函数,找出回力数:",DevOps)
打印结果:
只保留奇数: [1, 3, 5] 只保留偶数: [2, 4] 匿名函数结合filter函数,找出回力数: [101, 111, 121, 131, 141, 151, 161, 171, 181, 191]
filter函数会对传入的参数进行筛选,这里使用的偶数和奇数都是针对filter函数中作为参数的匿名函数的所有元素进行了一个判断,然后筛选。最后一个是对所有元素进行一个去掉筛选。
#!/usr/bin/python3 #coding:utf-8 #~~~~~~~~~~~~www.wulaoer.org 吴老二个人博客~~~~~~~ python3=[-2,5,9,-10,6] DevOps=sorted(python3,key=lambda x:abs(x)) print("根据据绝对值进行排序",DevOps) python3=["golong","nginx","jenkins","mysql","tomcat"] DevOps=sorted(python3,key=lambda x:x[0]) print("根据首字母进行排序",DevOps) python3= [('golong', 75), ('nginx', 92), ('mysql', 66), ('jenkins', 88)] DevOps=sorted(python3, key = lambda x : x[0]) print("根据名字进行排序",DevOps) DevOps=sorted(python3, key = lambda x : x[1], reverse=True) print("根据成绩进行排序:",DevOps)
输出结果:
根据据绝对值进行排序 [-2, 5, 6, 9, -10] 根据首字母进行排序 ['golong', 'jenkins', 'mysql', 'nginx', 'tomcat'] 根据名字进行排序 [('golong', 75), ('jenkins', 88), ('mysql', 66), ('nginx', 92)] 根据成绩进行排序: [('nginx', 92), ('jenkins', 88), ('golong', 75), ('mysql', 66)]
这个是针对sorted函数进行一个排序,作为匿名函数的参数,出入的是一个列表或者远足,真对排序时使用了排序方式,reverse,排序方向默认时从小到大,reverse=True是从大到小的排序,这就是匿名函数的用法,和相关场景涉及到的使用方法。
您可以选择一种方式赞助本站
支付宝扫一扫赞助
微信钱包扫描赞助
赏