Lambda 匿名函数
在Python中,lambda是一种用于创建 匿名函数(即没有名称的函数)的关键字。它通常用于简化代码,特别是在需要短小函数的地方(如高阶函数的参数)。
理解:普通表达式的本质就是一个匿名函数(如 a ** n + 1 可以看做以 a、n 为参数的函数,返回一个数);lambda 表达式只是将普通表达式显式地包装成一个只有 return 的函数,从而用于只接受 函数对象 作为参数的地方(如 sort 函数的 key 参数)。
1. 语法¶
特点:
• 没有函数名,但可以赋值给变量。
• 只能包含**一个表达式**,不能包含return、if-else 语句块(但可以用三元运算符)、循环等复杂逻辑。
• 自动返回表达式的结果。
• 通常用作 map()、filter()、sorted() 等高阶函数的参数。
2. 用法¶
(1) 基本用法¶
• 其中 add = lambda x, y: x + y相当于:
将 lambda 表达式赋值给变量实际上是创建了一个函数对象,用 def 语句定义函数也是创建了一个函数对象。由此可见,python 中万物皆对象,就算函数也是一种对象。
(2) 作为map等高阶函数的参数¶
(3) 条件表达式(三元运算符)¶
(4) 默认参数¶
3. lambda 与 def 函数的对比¶
| 特性 | lambda | def |
|---|---|---|
| 函数名 | 匿名(但可赋值给变量) | 必须有名称 |
| 代码块 | 仅限单行表达式 | 可包含多行语句、复杂逻辑 |
| 返回值 | 自动返回表达式结果 | 需显式return |
| 文档字符串 | 不支持 | 支持(通过__doc__) |
| 适用场景 | 简单操作、临时函数 | 复杂逻辑、复用函数 |
| 可读性 | 简单场景更简洁 | 复杂场景更清晰 |
4. 适用场景¶
-
✅ 适合用 lambda 的情况:
• 短小的函数,如
map()、filter()、sorted()的参数。• 临时函数,不需要复用。
• 简单的条件判断(三元运算符)。
-
❌ 不适合用 lambda 的情况:
• 需要多行逻辑的函数。
• 需要复用或调试的函数。
• 需要文档说明的函数。
5. 注意事项¶
- 避免滥用 lambda:如果逻辑复杂,用
def更清晰。 - 调试困难:
lambda报错时显示<lambda>,不易追踪。 - 性能差异:
lambda和def在运行速度上几乎没有区别。