大家好,我是正在实战各种AI项目的程序员晚枫。
今天分享一个让我处理大数据时内存占用减少90%的技术——生成器(Generator)。
你可能遇到过这种情况:要处理几万、几十万条数据,程序直接卡死或报MemoryError。这时候生成器就是你的救星。
看完这篇文章,你会理解为什么生成器被称为”省内存的神器”。
问题:列表太占内存
假设你要处理100万个数字:
1 | # 创建一个包含100万个数字的列表 |
问题:所有数据一次性加载到内存,数据量大了就崩溃。
解决方案:生成器
什么是生成器?
生成器是一种特殊的迭代器,它按需生成数据,而不是一次性全部生成。
就像自动售货机,你要一个它给一个,而不是先把所有商品堆在你面前。
创建生成器的两种方式
方式1:生成器函数(yield)
1 | def get_numbers_generator(n): |
方式2:生成器表达式
1 | # 列表推导式(占内存) |
yield的工作原理
1 | def simple_generator(): |
关键点:
- 遇到
yield暂停,保存当前状态 next()被调用时,从暂停处继续执行- 函数执行完毕抛出
StopIteration
实战案例
案例1:读取大文件
1 | # 传统方式(可能内存爆炸) |
案例2:无限序列
1 | def fibonacci(): |
案例3:数据管道
1 | def read_log_file(filename): |
生成器 vs 迭代器
| 特性 | 生成器 | 迭代器 |
|---|---|---|
| 创建方式 | yield或生成器表达式 | __iter__和__next__方法 |
| 代码复杂度 | 简单 | 较复杂 |
| 内存占用 | 极低 | 低 |
| 可重用性 | 一次性 | 一次性 |
结论:能用生成器就用生成器,代码简洁又高效。
常用内置生成器函数
1 | # enumerate - 带索引的遍历 |
推荐:AI Python零基础实战营
想系统学习Python高级特性?
课程内容:
- ✅ Python基础语法
- ✅ 生成器与迭代器详解
- ✅ 内存优化技巧
- ✅ 大数据处理实战
🎁 限时福利:送《Python编程从入门到实践》实体书
👉 点击了解详情
相关阅读
PS:生成器是Python的高级特性之一,掌握它,你就能优雅地处理大数据。
