Python函数的Lambda表达式介绍
Python 函数的 Lambda 表达式是一种简写的函数定义方式,其目的在于让代码更加简洁易懂。通常,一个函数需要使用 def 声明再写函数名来定义,加上形参和函数体。但是,对于一些简单的函数,使用 Lambda 表达式可以省略函数名、形参和 return 语句,只需要一个表达式即可完成函数定义。在这篇文章中,我们将具体介绍 Python 函数的 Lambda 表达式。
## Lambda 表达式的语法及基本语法
Lambda 表达式始于 lambda 关键字,根据 Python 的语法规则,Lambda 表达式的语法为:
lambda arguments: expression
其中,arguments 是 Lambda 表达式的参数列表,多个参数之间使用逗号隔开,这部分可省略,此时括号也要省略。expression 是 Lambda 表达式的表达式,就是 Lambda 表达式的返回值。
Lambda 表达式可以用于定义匿名函数对象。例如:
f = lambda x: x * x print(f(3))
输出:
9
这里我们首先定义了一个 Lambda 表达式 f,它接收一个参数 x 并返回 x * x 的值。紧接着,我们将参数 3 传递给这个表达式,并使用 print() 方法打印返回值 9。
## Lambda 表达式的应用场景
Lambda 表达式通常应用于需要传递函数对象的场合,例如:
### 1. map() 函数和 filter() 函数
Lambda 表达式常用于 map() 函数和 filter() 函数中。这两个函数也是 Python 内置的高阶函数,它们都需要传递一个待处理的可迭代对象和一个处理函数。map() 函数对可迭代对象每个元素都执行一次函数,将处理结果作为一个新的可迭代对象返回;filter() 函数则根据处理函数的返回值来筛选满足条件的元素,返回一个新的可迭代对象。例如:
lst = [1, 2, 3, 4] squares = map(lambda x: x * x, lst) evens = filter(lambda x: x % 2 == 0, lst) print(list(squares)) print(list(evens))
输出:
[1, 4, 9, 16] [2, 4]
这里我们使用了 map() 函数和 filter() 函数来对列表 lst 进行处理, 个 Lambda 表达式将列表中的每个元素平方,第二个 Lambda 表达式筛选出列表中所有的偶数。最后将结果转换为 list 对象并打印出来。
### 2. sorted() 函数
Lambda 表达式也可以用于定义排序关键字函数。Python 内置的 sorted() 函数允许对可迭代对象进行排序,其中 key 参数可以接收一个函数对象,用于定义排序关键字。例如:
lst = [2, 3, 1, 5, 4] sorted_lst = sorted(lst, key=lambda x: -x) print(sorted_lst)
输出:
[5, 4, 3, 2, 1]
这里我们使用 sorted() 函数对列表 lst 进行排序,其中 Lambda 表达式 -x 定义了排序关键字为元素的相反数,因此列表被降序排序。
## Lambda 表达式的注意事项
虽然 Lambda 表达式的语法特别简单,但在使用时还需要注意以下几点:
### 1. Lambda 表达式不建议用于复杂函数
虽然 Lambda 表达式可以让代码 concise, 代码更加简单易懂,但不建议用于复杂的函数,因为 Lambda 表达式只能包含单个表达式,而不能使用多行代码。此外,Lambda 表达式不能使用 Python 语句,如 if, for 等。
### 2. Lambda 表达式可以作为函数返回值返回
Lambda 表达式可以用于返回一个函数对象,例如:
def make_incrementor(n):
return lambda x: x + n
f = make_incrementor(42)
print(f(1))
print(f(2))
输出:
43 44
这里我们使用了一个 Lambda 表达式作为函数 make_incrementor 的返回值,其作用是将传入的参数加上 n 的值。我们先执行了 f = make_incrementor(42) 语句,这个语句返回一个 某个 n 的函数,此时 f 就是这个函数。紧接着,我们分别将参数 1 和 2 传递给 f,得到的结果分别是 43 和 44。
### 3. Lambda 表达式可以使用默认参数和可变参数
Lambda 表达式还支持使用默认参数和可变参数。默认参数的使用和普通函数一样,例如:
f = lambda x=0, y=0: x + y print(f(1, 2)) print(f())
输出:
3 0
这里我们使用了一个带有默认参数的 Lambda 表达式,它可以接受两个参数 x 和 y,如果参数没有传递,则默认为 0。我们分别传递了 (1, 2) 和 () 两个参数。
可变参数使用时,需要通过 * 或 ** 将参数转化为可变参数,例如:
f = lambda *args: sum(args) print(f(1, 2, 3))
输出:
6
这里我们使用了一个可变参数的 Lambda 表达式,它接收任意数量的整数,并将它们相加求和。
## 总结
Lambda 表达式是 Python 函数定义语法的一种简写方式,用于定义匿名函数对象。Lambda 表达式通常应用于需要传递函数对象的场合,例如 map() 函数、filter() 函数和 sorted() 函数等。在使用时应注意一些细节问题,避免滥用 Lambda 表达式。
