WMX · 随记
·Python· 3 分钟阅读

islice 分批:逐批消费有限内存中的数据

处理大量记录时,把所有数据先转成列表再切片会占用不必要的内存。分批消费迭代器,可以让内存需求主要受批大小控制。

▶ 本文含视频讲解
▶ 教学视频手动播放 · 英语讲解

Learn Python — Full Course for Beginners

Python 入门课程作为语法与编程背景复习;本文使用的较新标准库特性不保证在该课程中逐项覆盖。此为外部原版课程,多篇笔记可能共用;未剪辑为本文专属视频。

播放器需要能访问 YouTube 的网络;若这里无法加载,可打开原视频。本文与本地图解仍可独立阅读。

Python 系列概览:输入校验、数据处理与行为验证
Python 系列概览:输入校验、数据处理与行为验证 点击图片查看大图 ↗

问题从哪里出现

处理大量记录时,把所有数据先转成列表再切片会占用不必要的内存。分批消费迭代器,可以让内存需求主要受批大小控制。

理解核心机制

islice 从迭代器取有限数量元素。每次收集一批,遇到空批次结束;最后一批可能不足指定大小。创建迭代器应放在循环外,否则会反复从头开始。

动手做一个小实验

Python 3.11 或更新版本,仅使用标准库;将示例保存为 demo.py 后执行 python3 demo.py。

Python11 行 · 可横向滚动
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。

继续练习

测试空输入、大小为一和最后一批不足的情况,再记录处理失败时迭代器已经消耗到哪里。

参考资料

阅读相关官方文档或原始资料 ↗

← 返回文章归档