第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循环

原文地址:https://www.cnblogs.com/qmcj/p/9150070.html