迭代器(第21篇)

我们前面说过Iterable,所有的集合数据类型(比如list,tuple,dict,set,str等)都是Iterable对象,包括上一篇说到的generator,也是Iterable。他们有一个共同的特点,那就是都可以用for循环进行迭代。你可以使用isinstance()函数判断一个对象是不是Iterable对象:


>>> from collections import Iterable

>>> isinstance([], Iterable)

True

>>> isinstance({},Iterable)

True

而我们这一篇要讲的迭代器(Iterator),不但可以跟Iterable对象一样可以使用for循环迭代,还可以不断调用next()函数返回下一个值。我们上一篇说的generator就是迭代器(Iterator)。而list,tuple,dict,set都不能通过不断调用next()返回下一个值,所以它们不是Iterator。

生成器不仅是Iterable对象,还是Iterator对象。

你可以使用isinstance()来判断一个对象是不是Iterator对象:


>>> from collections import Iterator

>>> isinstance((x for x in range(10), Iterator )

True

>>> isinstance([],Iterator)

False

虽然list,dict,tuple等Iterable对象不是Iterator,但你可以通过iter()函数把它们变成Iterator对象:


>>> isinstance(iter([]),Iterator)

True

Iterator对象是一个惰性序列。惰性序列是指它并没有一下子就把它所有的元素列出来,因此它不知道自己有多少元素,只有当它不断next()的时候,它才会去计算下一个值是多少——所以它比较懒惰。

Iterator的好处是它不用一下子就列出所有的元素,那样会占用内存空间,所以它可以表示无限的概念。一个Iterator对象可以表示所有的自然数,但是用一个list就办不到,因为内存有限。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容