第5.5章 迭代器与生成器——CookBook笔记
将迭代器打包成类,维护额外的状态
__iter__ 实现为yield
for驱动与其他驱动(需要额外一次iter())的实现差异
委托到内置可迭代对象 与 基于生成器迭代的差异
iter与for的实现关联
手动访问迭代器中的元素
可迭代对象
迭代器对象
调用next
委托迭代
定义__iter__方法,将迭代请求委托到,对象内部的容器
生成器创建自定义迭代
函数中出现了yield,转变为生成器
只有在响应迭代操作才运行
实现迭代协议
简单方案:实现生成器
反向迭代
reversed
要求: 长度确定,或实现了__reversed__
否则先转化为列表
定义有额外状态的生成器函数
类,实现iter为生成器函数
类实例,提供内部属性访问
生成器需要与程序其他部分交互
暴露属性,允许方法调用来获得控制
需要额外调用一次iter,提取类中的迭代器
迭代器切片
itertolls.islice
产生迭代器,访问需要的数据
跳过开头一部分迭代元素
itertools.dropwhile
对可能的组合与排列
itertools.permutations
.combinations
指定:长度,是否允许重复
索引-值 迭代序列
enumerate
同时迭代多个序列
zip
取决于最短长度
最长
返回迭代器
不同容器迭代
chain
创建数据管道
生成器函数
应用于解析,读取实时数据源,定期轮询
yield作为数据生产者,内存高效性
扁平化嵌套序列
yield from 嵌套生成器
合并多个有序序列,整体有序
heapq.merge
要求输入有序
迭代器取代while循环