Python 开发与语法
迭代器、生成器与一次性数据流
分清可重复遍历的容器和消费后耗尽的迭代器。
原理
列表可以反复调用 iter 得到新迭代器。生成器对象本身就是迭代器,遍历结束后再次遍历不会重新生成数据。
开发中的做法
读取大文件时适合逐行 yield,避免把全部内容留在内存里。需要多遍处理时,重新创建迭代器,或在能接受内存成本时显式转换成列表。
验证与追问
测试空输入、单条记录和消费两次的场景。生成器依赖文件对象时,确保迭代发生在文件上下文尚未关闭的时候。
代码片段
def nonblank(lines):
for line in lines:
if text := line.strip():
yield text