Python 生成器与惰性求值:让内存占用降一个数量级(1023)
【摘要】 生成器与惰性求值实践笔记:逐行读取大文件、生成器表达式与内存对比。
处理大文件或大集合时,先把所有数据加载进列表往往是不必要的。Python 的生成器提供了一种惰性求值的方式,只在需要时才产出下一个值。
基本用法
def read_large(path):
with open(path, encoding="utf-8") as f:
for line in f:
yield line.strip()
# 逐行处理,内存占用恒定
total = sum(len(line) for line in read_large("big.log"))
生成器表达式
与列表推导式相比,把方括号换成圆括号即可得到生成器:(x*x for x in range(10**8)) 不会立即分配 8 千万个元素的内存。
注意事项
生成器只能遍历一次;需要多次遍历时可用 itertools.tee 或转成列表。合理使用生成器,是编写高吞吐数据处理管道的基础。
【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)