python迭代器
可以直接作用于for循环的数据类型
一类是集合数据类型:list,tuple,dict,set,str等
一类是generator,包括生气器和带yeild的gererator function
这些可以直接作用于for循环的对象称为可迭代对象:Iterable
判断是否可迭代用Iterable
from collections import Iterable
isinstance([],Iterable)
生成器不但可以作用于for循环,还可以被__next__()函数不断调用并返回下一个值,知道最后抛出StopIteration异常表示无法继续返回下一个值
可以被next()函数调用并不断返回下一个值的对象称为迭代器:Iterator
a = [1,2,3]
dir(a)可以看所有的方法
a 是可迭代对象,但不是迭代器
from collections import Iterator
isinstance((x for x in range(10)),Iterator)
生成器都是Iterator对象,但是list,dict,str虽然是Itrable,却不是Iterator。
把list,dict,str等Iterable变成Iterator可以使用iter()函数:
isinstance(iter([]),Iterator)
Iterator甚至可以表示一个无限大的数据流,例如全体自然数,而使用list是永远不可能存储全体自然数。
只能通过next()函数实现
按需计算下一个数据,所以Iterator的计算是惰性的,只有在需要返回下一个数据时才会计算
python3.0的range(10)本质上是迭代器,在终端中range(10)输出可以看出
文件,是迭代器的方法去取
readlines()