又称匿名函数lambda:是指一类无需定义标识符(函数名)的函数或子程序。
lambda 函数可以接收任意多个参数 (包括可选参数) 并且返回单个表达式的值。

语法:

1
lambda [arg1 [,arg2,.....argn]]:expression
  • args:函数将接收的参数
  • expression:结果为函数返回值的表达式

冒号前是参数,可以有多个,用逗号隔开,冒号右边的为表达式(只能为一个)。其实lambda返回值是一个函数的地址,也就是函数对象。

举例:将lambda函数赋值给一个变量,通过这个变量间接调用该lambda函数

1
2
3
4
5
6
7
8
def sum(x,y):
return x+y
print(sum(1,2))

# 使用lambda函数:
sum = lambda x,y : x+y
print(sum(1,2))
# 没有了函数sum的定义,又称为匿名函数

由于它的简单性,lambda 函数可以使Python 代码在某些场景中更优雅。下面是Python 中 lambda 函数的5个常见用法。

命名使用

1
2
3
4
5
6
7
8
9
lambda_add_ten = lambda x: x + 10
print(lambda_add_ten(5))
# 15

def add_ten(x):
return x + 10
print(add_ten(5))
# 15
# 两种方法结果相同,但 lambda 函数可以使代码更短更清晰。

与map()、 filter()和 reduce()等高阶函数配合

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# 打印其中所有的奇数
numbers = [1, 12, 37, 43, 51, 62, 83, 43, 90, 2020]

# 初级的你
odd_number = []
for n in numbers:
if n % 2 == 1:
odd_number.append(n)
print(odd_number)
# [1, 37, 43, 51, 83, 43]

# 高级的你
odd_numbers = [i for i in numbers if i % 2 == 1]

# 优雅的你
print(list(filter(lambda x: x % 2 == 1, numbers)))
# [1, 37, 43, 51, 83, 43]

赋予key参数使用

使用 sorted()或 sort()方法对 Python 中的迭代进行排序时,关键参数决定如何比较迭代中的两个元素

1
2
3
4
leaders = ["Jerry", "Tom", "Jerry Zhang", "Edward Li"]
leaders.sort(key=lambda x: len(x))
print(leaders)
# ['Tom', 'Jerry', 'Edward Li', 'Jerry Zhang']
1
2
3
4
leaders = {4: "Edward Li", 2: "Tom", 3: "Jerry Zhang", 1: "Jerry"}
leaders = dict(sorted(leaders.items(), key=lambda x: x[0]))
print(leaders)
# {1: 'Jerry', 2: 'Tom', 3: 'Jerry Zhang', 4: 'Edward Li'}

直接调用

1
2
3
4
5
6
7
(lambda x,y:x*y)(2,3)
# 出于可读性和可维护性的考虑,最好只在 Python 的交互式解释器中使用这个技巧
# 如果熟悉python中的下划线技巧,也可使用一下方式
lambda x,y:x*y
# <function <lambda> at 0x7fc319102d30>
_(2,3)
# 6

闭包中使用

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
# 闭包栗子:
def outer_func():
person = "Jerry"
def print_person(location=""):
return person + " in the " + location
return print_person

Lead = outer_func()("China")
print(Lead)
# Jerry in the China

# 使用lambda简化上述代码
def outer_func():
person = "Jerry"
return lambda location="": person + " in the " + location

Lead = outer_func()("China")
print(Lead)
# Jerry in the China

总之,lambda 函数为提供了更多的灵活性和方法设计选项。熟悉常见用法,正确使用,不要过度使用。