PHIL / NOTES
← 返回笔记目录
Python 开发与语法

迭代器、生成器与一次性数据流

分清可重复遍历的容器和消费后耗尽的迭代器。

原理

列表可以反复调用 iter 得到新迭代器。生成器对象本身就是迭代器,遍历结束后再次遍历不会重新生成数据。

开发中的做法

读取大文件时适合逐行 yield,避免把全部内容留在内存里。需要多遍处理时,重新创建迭代器,或在能接受内存成本时显式转换成列表。

验证与追问

测试空输入、单条记录和消费两次的场景。生成器依赖文件对象时,确保迭代发生在文件上下文尚未关闭的时候。

代码片段

def nonblank(lines):
    for line in lines:
        if text := line.strip():
            yield text