chunks() 定长分块生成器
✂️ 把序列切成定长块的生成器,myhexdump 逐行渲染的基础。
📎 源码在线查看:
myhexdump.py#L159-L178(chunks)
签名
python
def chunks(seq, size)
# 生成器:yield 长度 size 的块(最后一块可能不足)示例
python
>>> list(chunks([1,2,3,4,5,6,7], 3))
[[1, 2, 3], [4, 5, 6], [7]]实现
python
def chunks(seq, size):
d, m = divmod(len(seq), size)
for i in range(d):
yield seq[i * size:(i + 1) * size]
if m:
yield seq[d * size:]算法
divmod(len, size)拆成「完整块数 d + 尾巴长度 m」- 先 yield 出 d 个完整块
- 若有余数 m,再 yield 一个不足 size 的尾块
为什么用生成器
python
# 一次性返回 list 的写法(占内存)
def chunks_list(seq, size):
return [seq[i:i+size] for i in range(0, len(seq), size)]
# 生成器写法(惰性)
def chunks(seq, size):
...yield...处理大流量(上百 MB 的包)时不一次性占满内存——r0capture 抓大流量时这个惰性很关键。
在 hexdump 里的用途
hexdump 每行渲染 16 字节,就是用 chunks(binary, 16) 把明文按 16 字节分块,逐块格式化成一行。