islice 分批:逐批消费有限内存中的数据
处理大量记录时,把所有数据先转成列表再切片会占用不必要的内存。分批消费迭代器,可以让内存需求主要受批大小控制。
▶ 本文含视频讲解▶ 教学视频手动播放 · 英语讲解
Learn Python — Full Course for Beginners
Python 入门课程作为语法与编程背景复习;本文使用的较新标准库特性不保证在该课程中逐项覆盖。此为外部原版课程,多篇笔记可能共用;未剪辑为本文专属视频。
播放器需要能访问 YouTube 的网络;若这里无法加载,可打开原视频。本文与本地图解仍可独立阅读。
问题从哪里出现
处理大量记录时,把所有数据先转成列表再切片会占用不必要的内存。分批消费迭代器,可以让内存需求主要受批大小控制。
理解核心机制
islice 从迭代器取有限数量元素。每次收集一批,遇到空批次结束;最后一批可能不足指定大小。创建迭代器应放在循环外,否则会反复从头开始。
动手做一个小实验
Python 3.11 或更新版本,仅使用标准库;将示例保存为 demo.py 后执行 python3 demo.py。
from itertools import islice
def batches(values, size):
if size <= 0:
raise ValueError("positive size required")
iterator = iter(values)
while batch := list(islice(iterator, size)):
yield batch
result = list(batches(range(7), 3))
assert result == [[0, 1, 2], [3, 4, 5], [6]]
print(result)适用边界与常见误区
分批不等于并发,也不意味着整批可以安全重试。批内发生部分成功时,需要业务幂等或事务策略。Python 新版本还提供 itertools.batched。
继续练习
测试空输入、大小为一和最后一批不足的情况,再记录处理失败时迭代器已经消耗到哪里。