lambda主要用在一些简单的,并不需要特地命名的函数. 比如我们有一个函数
def add(x,y):return x+y
用匿名函数可以是
lambda x,y : x+y
#这个表达式表示输出x+y的值
需要注意的是,匿名函数 冒号前面是变量 相当于函数的传参 冒号后面是代码,并且冒号后面不允许出现 =号赋值
lambda也支持三目运算符
lambda x,y : x if x >y else y #这个匿名函数表示输出X 如果x比y大的话,否则输出y
我们来看一些高级一点的用法 ,我们都知道sorted方法可以对一个数组排序.
list2 = [1,3,4,5,8,4,3,9] a = sorted(list2) print(a) #[1, 3, 3, 4, 4, 5, 8, 9]
但是如果有一个这样的列表 ,我们想根据元祖中的数字来对这个列表的值排序
list1 = [("a",3),("c",5),("ddd",7),("ea",2),("bb",9),("fe",8), ]
我们可以用sorted方法的key关键字,传递一个lambda函数给他
a = sorted(list1,key=lambda x:x[1]) print(a) #[('ea', 2), ('a', 3), ('c', 5), ('ddd', 7), ('fe', 8), ('bb', 9)]
lambda函数更多的是配合高阶函数来使用,比如我们有个列表,我们需要计算列表中每个值的平方
list2 = [1,3,4,5,8,4,3,9] list1 = [] for i in list2:list1.append(i ** 2 ) print(list1) #[1, 9, 16, 25, 64, 16, 9, 81]
比较繁琐,我们用高阶函数加匿名函数 一行代码就可以实现
list2 = [1,3,4,5,8,4,3,9]a = map(lambda x:x**2 ,list2) print(list(a)) #[1, 9, 16, 25, 64, 16, 9, 81]
#这里map函数得到的结果是一个map对象,我们可以通过list转换的方式将他打印出来.map对象不能直接print
映射 (map) 高阶函数还可以对1个以上的对象进行计算,比如
list1 = (1,3,4,5,8,4,3,9) list2 = (1,3,4,5,8,4,3,9)a = map(lambda x,y:x + y ,list1,list2) print(tuple(a)) #这可以让两个元祖的值互相相加,得出结果 (2, 6, 8, 10, 16, 8, 6, 18)
规约(reduce) 要注意的是reduce需要导包才可以使用
from functools import reduce