迭代对象和迭代器

一、可迭代对象(Iterable)

1.可以直接作用于for循环的对象就是可迭代对象。

2.可直接作用于for循环的数据类型有两类:

<1>集合数据类型

list、tuple、dict、set、str等

<2>generator

生成器和带yield的generator function(这两个在生成器那一文章中进行解释了)

3.用isinstance()判断一个对象是不是Itetrable对象

二、迭代器(Iterator)

1.可迭代对象可以有两种,集合数据类型和生成器,两种之所以能称为可迭代对象是因为都能直接作用于for循环,但两者也是有区别的,区别在于生成器那章所讲的,生成器可以被next()函数调用并不断返回下一个值,所以我们也把可以被next()函数调用并不断返回下一个值的对象称为迭代器。

2.可以用isinstance()判断一个对象是不是Iterator对象。

三、总结

1.可迭代对象是Iterable,迭代器对象是Iterator。

2.list,dict,str等集合数据类型是可迭代对象,因为可以直接作用for循环,但不是迭代器对象,因为不能调用next()函数去打印下一个数据。

3.为什么listdictstr等数据类型不是Iterator

这是因为Python的Iterator对象表示的是一个数据流,Iterator对象可以被next()函数调用并不断返回下一个数据,直到没有数据时抛出StopIteration错误。可以把这个数据流看做是一个有序序列,但我们却不能提前知道序列的长度,只能不断通过next()函数实现按需计算下一个数据,所以Iterator的计算是惰性的,只有在需要返回下一个数据时它才会计算。Iterator甚至可以表示一个无限大的数据流,例如全体自然数。而使用list是永远不可能存储全体自然数的。

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章