lambda函数又叫做“匿名函数”。当你完成一件小工作时,直接使用该函数可以让你的工作得心应手。
lambda函数介绍
在Python中,定义函数使用的是def关键字,但是通过lambda关键字来定义的函数,称之为“匿名函数”。
函数的语法如下:
- lambda 参数:表达式
函数用法如下:
- ①先写lambda关键字,②然后依次写匿名函数的参数,多个参数之间用逗号连接,③接着是一个冒号,④冒号后面写的是返回的表达式。
需要注意以下几点:
- lambda函数能接收任意多个参数,但只能返回一个表达式的值;
- lambda函数是一个函数对象,如果直接赋值给一个变量,这个变量就成了一个函数对象;
当待处理的业务符合匿名函数的特点:多个参数和一个返回值,并且该函数只在一个地方使用,不在其他地方复用,建议使用lambda函数。
lambda函数的简单使用
下面我们写了带有一个参数的匿名函数。
print(lambda x: x + 2)# <function <lambda> at 0x000001CFE5851EA0>
接着,使用type()函数打印该函数的类型,得到的是一个function函数对象。
print(type(lambda x: x + 2))# <class \'function\'>
将匿名函数传递给一个参数,调用匿名函数。
注意:通过这种方式调用匿名函数,变量名+括号。
a = lambda x: x + 2print(a(2))# 4
lambda函数的不同形式
lambda函数中可以不传参数,可以传递一个参数,二个参数,或者传递多个参数。
无参数的lambda函数
不管是有参数还是无参数,调用一定是变量名+括号,即这个括号不能省略,否则返回的是一个function函数对象。
In[1]:x1 = lambda: 88print(x1())# 88
单参数的lambda函数
单参数指的是匿名函数中只有一个参数,下面来看一个例子。
lambda x: x + 2print(b(8))# 10
多参数的lambda函数
多参数指的是匿名函数中有多个参数,下面来看一个例子。
c = lambda x, y: x * yprint(c(2, 5))# 10
带分支的lambda函数
有时候我们可以根据给定的参数,来判断接下来需要做什么,这就需要匿名函数结合分支表达式使用了。
d = lambda x: x - 1 if x > 5 else x + 1print(d(9)) # 8print(d(3)) # 4
lambda函数与Python内置函数配合使用
其实lambda函数还可以与sorted函数,map函数和filter函数,联合使用。这里以sorted函数为例进行举例说明。
对列表里的字典排序
l = [{\'a\': 1, \'b\': 41}, {\'a\': 1111, \'b\': 24}, {\'a\': 1111, \'b\': 32}]l_s = sorted(l, key=lambda x: x[\"b\"], reverse=True)print(l_s)# [{\'a\': 1, \'b\': 41}, {\'a\': 1111, \'b\': 32}, {\'a\': 1111, \'b\': 24}]
对字典进行key排序
m = {\'a\': 25, \'c\': 27, \'b\': 20, \'d\': 22}m_s = sorted(m.items(), key=lambda x: x[0])print(m_s)# [(\'a\', 25), (\'b\', 20), (\'c\', 27), (\'d\', 22)]
对字典进行values排序
n = {\'a\': 25, \'c\': 27, \'b\': 20, \'d\': 22}n_s = sorted(n.items(), key=lambda x: x[1])print(n_s)# [(\'b\', 20), (\'d\', 22), (\'a\', 25), (\'c\', 27)]
其它用法
ad8
print(list(map(lambda x: x * x, range(1, 11))))# [1, 4, 9, 16, 25, 36, 49, 64, 81, 100]print(list(filter(lambda x: x % 2 == 0, range(1, 11))))# [2, 4, 6, 8, 10]