主题:生成器与上下文管理器
目标
- 理解生成器的工作原理与
yield
表达式。 - 初步了解协程的概念与应用。
- 学习如何实现自定义上下文管理器。
- 通过生成器管道处理大文件。
一、生成器与 yield
表达式
1. 生成器的基本概念
生成器是一种特殊的迭代器,能够逐步生成数据,而不是一次性生成并存储所有数据。生成器函数使用 yield
关键字来返回值。
示例:
def my_generator():
print("生成器开始执行")
yield 1
print("生成器继续执行")
yield 2
print("生成器结束执行")
# 使用生成器
g = my_generator()
print(next(g)) # 输出:1
print(next(g)) # 输出:2
解释:
- 生成器函数
my_generator
使用yield
返回值。 - 每次调用
next()
时,生成器从上次暂停的位置继续执行。 - 生成器的状态会被保留,直到生成器完成或抛出
StopIteration
。
2. 生成器的优势
- 内存高效:生成器逐个生成数据,适合处理大数据或无限序列。
- 惰性计算:只在需要时生成数据,避免不必要的计算。
示例:处理大文件
def read_file(filename):
with open(filename, 'r') as f:
for line in f:
yield line.