lambda 表达式
Lambda 表达式(Lambda expression) 也称为 匿名函数(Anonymous function),就是没有名字的临时函数。它用于简化代码,尤其是在需要将函数作为参数的场景中(比如 map()、filter()、sorted() 等)。
在 Python 中,它是通过关键字 lambda 定义的。
语法结构
lambda:关键字,表示匿名函数;
- 参数列表:和普通函数的参数类似,可以有多个参数;
- 表达式`:必须是一个单一表达式,不能写多行语句;
- 返回值:表达式的计算结果会自动作为返回值。
举例:
1 2 3 4 5 6 7 8
| def add(x, y): return x + y
add_lambda = lambda x, y: x + y
print(add_lambda(3, 5))
|
核心特征
| 特征 |
描述 |
| 匿名性 |
没有函数名,用完即丢 |
| 简洁性 |
一行定义一个函数 |
| 函数式编程风格 |
常与高阶函数(map、filter、reduce、sorted)搭配 |
| 只能有一个表达式 |
不允许多条语句或复杂逻辑 |
应用场景
在 map() 中使用
对可迭代对象中的每个元素执行相同的操作。
1 2 3
| nums = [1, 2, 3, 4] squares = list(map(lambda x: x ** 2, nums)) print(squares)
|
在 filter() 中使用
过滤序列,保留符合条件的元素。
1 2 3
| nums = [1, 2, 3, 4, 5, 6] even = list(filter(lambda x: x % 2 == 0, nums)) print(even)
|
在 sorted() 中使用
自定义排序规则。
1 2 3 4 5 6 7 8 9
| people = [ {"name": "Alice", "age": 25}, {"name": "Bob", "age": 19}, {"name": "Charlie", "age": 30} ]
sorted_people = sorted(people, key=lambda p: p["age"]) print(sorted_people)
|
在 reduce() 中使用
需要导入 functools 模块。常用于累计操作。
1 2 3 4
| from functools import reduce nums = [1, 2, 3, 4] total = reduce(lambda x, y: x + y, nums) print(total)
|
与普通函数的区别
| 对比项 |
普通函数(def) |
Lambda 表达式 |
| 语法 |
使用 def |
使用 lambda |
| 名字 |
有名字 |
通常匿名 |
| 功能 |
可包含多行语句 |
只能有单行表达式 |
| 可读性 |
更清晰 |
适合小函数或临时逻辑 |
| 场景 |
通用函数 |
短小、一次性逻辑 |
注意事项
- 只能有一个表达式,不能有赋值语句或
if...else 结构(除非用表达式形式)。
- 调试困难:因为没有名字,报错信息不友好。
- 可读性差:滥用 lambda 会让代码难懂。
- 作用域限制:lambda 中使用的变量要在其定义时就存在。
进阶用法
1 2 3
| max_func = lambda a, b: a if a > b else b print(max_func(10, 3))
|
或者与内置函数组合:
1 2 3 4
| data = [("apple", 3), ("banana", 2), ("cherry", 5)]
sorted_data = sorted(data, key=lambda x: x[1], reverse=True) print(sorted_data)
|
编程地位
Lambda 是 函数式编程(Functional Programming) 的核心工具之一。与 map(), filter(), reduce() 搭配,可实现声明式的简洁代码:
1 2 3 4
| nums = [1, 2, 3, 4] result = reduce(lambda a, b: a + b, map(lambda x: x ** 2, nums)) print(result)
|
要点总结
| 要点 |
内容 |
| 关键词 |
lambda 参数: 表达式 |
| 返回值 |
表达式的计算结果 |
| 优点 |
简洁、灵活、与高阶函数配合强大 |
| 缺点 |
不易调试、可读性弱、功能有限 |
| 典型场景 |
map、filter、sorted、reduce、自定义 key |