Python lambda 表达式
lambda 创建匿名函数,语法简洁,适合简单的单行操作。
基本语法
Python
lambda 参数: 表达式
# 等价于
def func(参数):
return 表达式
基本用法
Python
# 无参数
f = lambda: 'Hello'
print(f()) # Hello
# 单参数
square = lambda x: x ** 2
print(square(5)) # 25
# 多参数
add = lambda x, y: x + y
print(add(3, 5)) # 8
# 默认参数
greet = lambda name='World': f'Hello, {name}'
print(greet()) # Hello, World
print(greet('Alice')) # Hello, Alice
与高阶函数配合
Python
# map
numbers = [1, 2, 3, 4, 5]
squared = map(lambda x: x ** 2, numbers)
print(list(squared)) # [1, 4, 9, 16, 25]
# filter
evens = filter(lambda x: x % 2 == 0, numbers)
print(list(evens)) # [2, 4]
# sorted
pairs = [(1, 'one'), (3, 'three'), (2, 'two')]
sorted_pairs = sorted(pairs, key=lambda x: x[1])
print(sorted_pairs) # [(1, 'one'), (3, 'three'), (2, 'two')]
排序场景
Python
# 按字典键排序
students = [{'name': 'Alice', 'age': 25},
{'name': 'Bob', 'age': 20},
{'name': 'Charlie', 'age': 30}]
by_age = sorted(students, key=lambda s: s['age'])
print(by_age) # 按年龄升序
# 多条件排序
by_name_age = sorted(students, key=lambda s: (s['name'], s['age']))
# 降序
by_age_desc = sorted(students, key=lambda s: s['age'], reverse=True)
条件表达式
Python
# 三元表达式
classify = lambda x: 'positive' if x > 0 else 'negative' if x < 0 else 'zero'
print(classify(5)) # positive
print(classify(-3)) # negative
print(classify(0)) # zero
# 取最大值
max_val = lambda a, b: a if a > b else b
print(max_val(10, 20)) # 20
立即调用
Python
# IIFE 模式
result = (lambda x, y: x + y)(3, 5)
print(result) # 8
闭包捕获
Python
# 捕获外部变量
def make_multiplier(n):
return lambda x: x * n
double = make_multiplier(2)
triple = make_multiplier(3)
print(double(5)) # 10
print(triple(5)) # 15
使用限制
| 限制 | 说明 |
|---|---|
| 单表达式 | 不能包含多条语句 |
| 无语句 | 不能包含 print、赋值等 |
| 无文档 | 无法添加 docstring |
Python
# 错误示例:多语句
# lambda x: print(x); return x # 语法错误
# 复杂逻辑应使用普通函数
def process(x):
print(x)
return x ** 2
lambda vs def
| 特性 | lambda | def |
|---|---|---|
| 语法 | 单行 | 多行 |
| 名称 | 匿名 | 有名 |
| 复杂度 | 简单 | 可复杂 |
| 可读性 | 较低 | 较高 |
| 适用场景 | 临时使用 | 复用函数 |
要点总结
- lambda 语法:
lambda 参数: 表达式 - 只能包含单个表达式,不能有语句
- 常用于高阶函数参数、排序键函数
- 复杂逻辑应使用 def 定义函数
- 可捕获外部变量形成闭包
- 保持简洁,避免过度使用
📝 发现内容有误?点击此处直接编辑