lambda 表达式

Lambda 表达式(Lambda expression) 也称为 匿名函数(Anonymous function),就是没有名字的临时函数它用于简化代码,尤其是在需要将函数作为参数的场景中(比如 map()filter()sorted() 等)。

在 Python 中,它是通过关键字 lambda 定义的。

语法结构

1
lambda 参数列表: 表达式
  • lambda:关键字,表示匿名函数;
  • 参数列表:和普通函数的参数类似,可以有多个参数;
  • 表达式`:必须是一个单一表达式,不能写多行语句;
  • 返回值:表达式的计算结果会自动作为返回值。

举例

1
2
3
4
5
6
7
8
# 普通函数
def add(x, y):
return x + y

# 等价的 lambda 写法
add_lambda = lambda x, y: x + y

print(add_lambda(3, 5)) # 输出 8

核心特征

特征 描述
匿名性 没有函数名,用完即丢
简洁性 一行定义一个函数
函数式编程风格 常与高阶函数(map、filter、reduce、sorted)搭配
只能有一个表达式 不允许多条语句或复杂逻辑

应用场景

map() 中使用

对可迭代对象中的每个元素执行相同的操作。

1
2
3
nums = [1, 2, 3, 4]
squares = list(map(lambda x: x ** 2, nums))
print(squares) # [1, 4, 9, 16]

filter() 中使用

过滤序列,保留符合条件的元素。

1
2
3
nums = [1, 2, 3, 4, 5, 6]
even = list(filter(lambda x: x % 2 == 0, nums))
print(even) # [2, 4, 6]

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) # 10

与普通函数的区别

对比项 普通函数(def) Lambda 表达式
语法 使用 def 使用 lambda
名字 有名字 通常匿名
功能 可包含多行语句 只能有单行表达式
可读性 更清晰 适合小函数或临时逻辑
场景 通用函数 短小、一次性逻辑

注意事项

  1. 只能有一个表达式,不能有赋值语句或 if...else 结构(除非用表达式形式)。
  2. 调试困难:因为没有名字,报错信息不友好。
  3. 可读性差:滥用 lambda 会让代码难懂。
  4. 作用域限制:lambda 中使用的变量要在其定义时就存在。

进阶用法

1
2
3
# 三元表达式写法
max_func = lambda a, b: a if a > b else b
print(max_func(10, 3)) # 10

或者与内置函数组合:

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) # 30

要点总结

要点 内容
关键词 lambda 参数: 表达式
返回值 表达式的计算结果
优点 简洁、灵活、与高阶函数配合强大
缺点 不易调试、可读性弱、功能有限
典型场景 map、filter、sorted、reduce、自定义 key