生成器(Generator)是Python中处理迭代器的优雅方式,尤其在处理大数据流时能显著优化内存使用。以下是关键知识点:
1. 生成器核心机制
- 状态保存:通过
yield
暂停函数执行,自动保存局部变量状态 - 惰性求值:按需生成数据,避免一次性加载全部内容
- 迭代器协议:生成器本质是实现了
__iter__
和__next__
方法的对象
2. 生成器进阶级用法
2.1 嵌套生成器
def gen1():
for i in range(3):
yield gen2(i)
def gen2(x):
yield from (y * x for y in range(4))
2.2 生成器表达式
# 生成器表达式 vs 列表推导式
data = (x**2 for x in range(1000000)) # 内存效率更高
2.3 协程应用
通过 yield from
实现多层协作,可参考 /course-center/documents/python/advanced/coroutines/overview 深入学习
3. 生成器性能优化技巧
- 避免在生成器中频繁使用
next()
- 合理设置
send()
传递参数 - 使用
throw()
处理异常情况 - 通过
close()
终止生成器
4. 常见误区
- ❌ 误将生成器作为列表使用
- ❌ 忽略生成器的惰性特性
- ❌ 未处理生成器的异常退出
- ❌ 过度使用嵌套生成器导致可读性下降
建议通过实践加深理解,可尝试 /course-center/documents/python/advanced/generators/exercises 的练习题巩固知识。