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

 

posted on 2018-06-07 13:05  秦梦超  阅读(96)  评论(0编辑  收藏  举报

导航