lambda
函数lambda
函数是 Python 中的一种 匿名函数,它使用关键字 lambda
定义。lambda
函数通常用于需要短小函数的场景,尤其是在需要 函数作为参数 的时候。
lambda
函数的基本语法lambda arguments: expression
arguments
:函数的参数(可以有多个)。expression
:一个表达式,该表达式的值将作为 lambda
函数的返回值。lambda
函数没有显式的 return
语句,它的 返回值是表达式的计算结果。lambda
函数的基本示例lambda
函数# 计算两个数的和
sum = lambda x, y: x + y
print(sum(5, 3)) # 输出 8
这是一个最简单的
lambda
函数,接受两个参数x
和y
,返回它们的和。
lambda
函数作为函数参数lambda
函数常常用作高阶函数的参数,尤其是在 map()
、filter()
、sorted()
等函数中。
# 使用 lambda 函数对列表进行排序
numbers = [3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5]
sorted_numbers = sorted(numbers, key=lambda x: x)
print(sorted_numbers) # 输出 [1, 1, 2, 3, 3, 4, 5, 5, 5, 6, 9]
lambda
与 map()
函数一起使用map()
函数接受一个函数和一个可迭代对象,将函数应用到可迭代对象的每个元素上。
# 使用 lambda 函数将列表中的每个元素平方
numbers = [1, 2, 3, 4, 5]
squared_numbers = map(lambda x: x ** 2, numbers)
print(list(squared_numbers)) # 输出 [1, 4, 9, 16, 25]
lambda
与 filter()
函数一起使用filter()
函数用于过滤可迭代对象中的元素,返回满足条件的元素。
# 使用 lambda 函数筛选出偶数
numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9]
even_numbers = filter(lambda x: x % 2 == 0, numbers)
print(list(even_numbers)) # 输出 [2, 4, 6, 8]
lambda
与 sorted()
函数一起使用sorted()
可以使用 lambda
函数作为排序规则来进行自定义排序。
# 按列表中的字典的值排序
students = [
{"name": "Alice", "age": 25},
{"name": "Bob", "age": 22},
{"name": "Charlie", "age": 23}
]
sorted_students = sorted(students, key=lambda x: x["age"])
print(sorted_students)
输出:
[{'name': 'Bob', 'age': 22}, {'name': 'Charlie', 'age': 23}, {'name': 'Alice', 'age': 25}]
这里,
lambda
函数用于指定排序的依据 —— 每个字典的age
键。
lambda
函数的特性lambda
函数没有函数名,属于匿名函数,通常用于需要临时函数的场合,不必定义一个完整的函数。
lambda
函数的 主体是单一的表达式,不能包含语句(例如 if
、while
等语句)。它是一个简洁的表达式,适用于短小的功能。
def
的对比lambda
是 匿名的,但 def
定义的函数有名称。lambda
只能有 单一表达式,而 def
可以包含多个语句和复杂的逻辑。# 使用 lambda
square = lambda x: x ** 2
# 使用 def
def square(x):
return x ** 2
上面的
lambda
和def
定义的函数执行效果完全相同,但lambda
更简洁。
lambda
函数的应用场景高阶函数如 map()
、filter()
、sorted()
、reduce()
等都需要一个函数作为参数,lambda
函数非常适合用来定义这些临时的函数。
当你只需要一个简单的函数并且不会重复使用时,lambda
函数特别适合。它能够减少代码量,使代码更加简洁。
lambda
常用于 自定义排序 的场景,可以快速指定排序的依据。
在事件驱动编程(如 GUI 编程中)中,lambda
函数常用于 回调函数。
lambda
函数的注意事项lambda
函数的 作用范围很小,它通常用于局部操作,不适合复杂的计算和逻辑。lambda
函数虽然简洁,但如果使用过多可能会导致 代码可读性差,特别是当函数比较复杂时,推荐使用 def
定义一个常规函数。特性 | 说明 |
---|---|
匿名函数 | lambda 函数没有函数名,通常用于临时需求 |
单行表达式 | 只能包含一个表达式,不能有语句 |
返回值 | 返回表达式的值,无需 return 语句 |
高阶函数 | 常作为 map() 、filter() 、sorted() 等函数的参数 |
简洁 | 适用于需要快速定义简单函数的场合 |
lambda
示例小结:lambda x: x + 2
:一个接收参数 x
并返回 x + 2
的函数。sorted([1, 2, 3], key=lambda x: x**2)
:按数字的平方值对列表排序。lambda
函数非常适合用于函数式编程风格,简洁且高效。如果你只需要一个临时的、简单的函数,那么 lambda
是一个非常好的选择。