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