Python中Iterator和Iterable的区别

python中list, str,truple,  dict都是可以被迭代的,但他们不是迭代器。why?

list/truple/map/dict这些数据的大小是确定的,我们可以准确知道他们的size。

迭代器不知道要执行多少次,所以可以理解为不知道有多少个元素,每调用一次next(),就会往下走一步,是惰性的。


判断是不是可以迭代,用Iterable

from collectionsimport Iterable  

isinstance({}, Iterable) -->True  

isinstance((), Iterable) -->True  

isinstance(100, Iterable) -->False 

凡是可以for循环的都是Iterable


判断是不是迭代器,用Iterator

isinstance({}, Iterator)  -->False  

isinstance((), Iterator) -->False  

isinstance( (xfor xin range(10)), Iterator)  -->True  

凡是可以.(next)的,都是Iterator.


备注:

集合数据类型如list,truple,dict,str,都是Itrable不是Iterator,但可以通过iter()函数获得一个Iterator对象

Python中的for循环就是通过next实现的

参考资料:https://www.jianshu.com/p/c523b4a8be6c

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

推荐阅读更多精彩内容