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()

posted @ 2018-05-14 09:41  强巴  阅读(135)  评论(0编辑  收藏  举报