Python-- Lambda
- Lambda 表达式是一个匿名函数,Lambda表达式基于数学中的λ演算得名(可见数学是多么强大!),直接对应于其中的lambda抽象,是一个匿名函数,即没有函数名的函数。
- Lambda表达式是Python中一类特殊的定义函数的形式,使用它可以定义一个匿名函数。与其它语言不同(Lambda 表达式还可以应用在C#,C++,Java),Python的Lambda表达式的函数体只能有单独的一条语句,也就是返回值表达式语句。
平时我们定义函数会使用def来定义,那么当你想使用一个函数,并且只是临时使用它一下,就没有必要非得给它起一个名字,因此lambda表达式派上了用处,下面将以几个例子进行说明:
1.sorted:排序函数
sorted函数可以直接对list进行排序,也可以接收一个key函数来实现自定义的排序,例如按照绝对值进行排序如下图:
sorted([1,-2,0,5],key=abs)
那么对于自定义的函数key,我们就可以使用Lambda表达式来定义自己想要的方式了。我们就可以将上图代码改为:
sorted([1,-2,0,5],key=lambda x:abs(x))
2.filter:筛选函数
filter函数用来对序列进行筛选,filter(function,list)包含两个参数,第一个参数为函数,第二个参数为列表,function作用于list中每一个元素。用法如下:
print(list(filter(lambda x: x > 3 , [1, 2, 3, 4, 5])))
在这里,我们在第一个参数位置使用了匿名函数,用来筛选大于3的数,匿名函数的优点在这就体现了出来,不用麻烦的去定义一个全新的函数,十分方便。
3.map():根据提供的函数对指定序列做映射
map(function,list)至少包含两个参数,第一个参数为函数,第二个参数为列表(可以为多个序列),函数参数依次对序列进行映射。用法如下:
def square(x):
return x ** 2
map_1 = map(square,[1,2,3,4])
map_2 = map(lambda x: x ** 2,[1,2,3,4])
print('map_1=',list(map_1))
print('map_2=',list(map_2))
运行结果:
map_1= [1, 4, 9, 16]
map_2= [1, 4, 9, 16]
可以看出匿名函数的作用与square的作用相同,是不是十分方便呢?
4.从一个函数中返回;
def add():
return lambda x : x + 1
r = add()
print(r(4))
可知输出结果为5,常用来实现函数装饰器(Wrapper)