Python生成器适合大数据流处理、内存受限场景,通过yield实现延迟计算,逐项产出数据,避免内存溢出;可用于大文件读取、数据库游标封装、无限序列生成、实时数据采集、管道式处理及简化分步任务逻辑。

Python生成器适合处理大数据流、节省内存、延迟计算的场景,核心在于“用时才算”,不提前占用资源。
需要遍历大量数据但内存有限
比如读取超大文件、处理海量日志或数据库游标结果。一次性加载全部内容会爆内存,而生成器逐行/逐条产出,内存只保留当前项。
- 用 yield 写一个逐行读文件的生成器,比
file.readlines()节省90%以上内存 - 数据库查询时,用 fetchone() + 生成器封装,避免 fetchall() 把百万记录全拉进内存
表达无限序列或动态计算过程
像斐波那契数列、素数流、时间戳序列这类逻辑上无终点的数据,生成器天然支持“边算边给”,无需预设长度。
- 写一个 fibonacci() 生成器,调用者想取前10个就取10个,想取100万也只算100万次,不浪费
- 传感器实时采集数据时,生成器可包装成持续产出新值的接口,下游按需消费
管道式数据处理(pipeline)
多个加工步骤串联时,生成器能实现“一个数据流经所有环节”,避免中间列表堆积,提升吞吐效率。
立即学习“Python免费学习笔记(深入)”;
- 例如:日志行 → 过滤错误 → 提取字段 → 转小写 → 统计词频,每步都用生成器,全程零临时列表
- 用 (x.upper() for x in source) 这类生成器表达式,比
[x.upper() for x in source]更轻量
替代回调或状态机的简化逻辑
某些需要“暂停-恢复”执行的场景(如协程雏形、分步任务),生成器的 yield 天然保存上下文,比手动维护状态变量更清晰。
惰性计算不是“不计算”,而是“不早算”。生成器的价值不在语法多炫,而在让程序更贴近真实数据流动节奏——要了再算,算了就走,不囤货,不卡顿。










