《用得巧,省得妙:深入理解 Python 生成器与迭代器的内存优化魔法》

《用得巧,省得妙:深入理解 Python 生成器与迭代器的内存优化魔法》


一、写在前面:为什么你该关心“内存占用”?

在一次数据处理项目中,我曾遇到一个棘手的问题:一个 CSV 文件大小不过 1GB,却频繁导致内存溢出。原因?我一开始用的是 list 把所有数据一次性读入内存。直到我换成生成器(generator),内存占用才从几百 MB 降到几十 KB,程序也不再崩溃。

这就是生成器的魔法:延迟计算、按需生成、节省内存

在 Python 的世界里,生成器与迭代器是处理大数据、流式数据、懒加载等场景的利器。它们不仅能让你的程序更高效,还能让你写出更优雅的代码。

这篇文章将带你从基础到进阶,全面掌握生成器与迭代器的使用方式、底层原理与实战技巧,帮助你写出更“轻盈”的 Python 程序。


二、基础入门:迭代器与生成器的区别与联系

1. 什么是迭代器(Iterator)?

迭代器是实现了 __iter__()__next__() 方法的对象。它可以被 for 循环消费,也可以手动调用 next() 获取下一个元素。

numbers = [1, 2, 3]
it = iter(numbers)
print(next(it))  # 输出 1
print(next(it))  # 输出 2

2. 什么是生成器(Generator)?

生成器是特殊的迭代器,它通过 yield 语句“懒惰”地产生值。每次调用 next(),生成器函数会从上次 yield 的地方继续执行。

def count_up_to(n):
    i = 1
    while i <= n:
        yield i
        i += 1

for num in count_up_to(3):
    print(num)

输出:

1
2
3

3. 为什么生成器更节省内存?

因为生成器不会一次性把所有数据加载到内存中,而是按需生成。这在处理大文件、网络流、数据库分页等场景中尤为重要。


三、实战演练:生成器的内存优势对比

示例:读取百万行日志文件

假设我们有一个 100 万行的日志文件 logs.txt,每行约 200 字节,总大小约 200MB。

方法一:一次性读取(高内存)
with open('logs.txt') as f
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

清水白石008

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值