Python基础

Python中Iterator和Iterable的区别

2019-04-01  本文已影响6人  极客与宽客

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

上一篇 下一篇

猜你喜欢

热点阅读