Python中的可迭代对象和迭代器对象

Python中的可迭代对象和迭代器对象是两种不同的东西,可迭代对象是Iterable,迭代器对象是Iterator

>>> from collections import Iterator
>>> from collections import Iterable
>>> l = [1, 2, 3]
>>> s = 'abc'
>>> isinstance(l, Iterable)
True
>>> isinstance(s, Iterable)
True
>>> isinstance(l, Iterator)
False
>>> isinstance(s, Iterator)
False

查看list类和str类,里面有一个_iter_方法

>>> l_i = l.__iter__()
>>> s_i = s.__iter__()
>>> isinstance(l_i, Iterator)
True
>>> isinstance(s_i, Iterator)
True

通过_iter_产生的对象进行next

>>> next(l_i)
1
>>> next(l_i)
2
>>> next(l_i)
3
>>> next(l_i)
Traceback (most recent call last):
  File "<input>", line 1, in <module>
StopIteration

这与用for进行迭代比较发现结果相同,所以for的内部执行逻辑就是先调用对象的_iter_方法,然后一直进行next直到抛出StopIteration

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

推荐阅读更多精彩内容

  • PYTHON-进阶-ITERTOOLS模块小结转自wklken:http://wklken.me/posts/20...
    C_Y_阅读 1,082评论 0 2
  • 迭代器(Iterable) 简单来说,迭代器对象(my_list)可以让以下代码正常工作: 如果对象实现了__it...
    SOLAREST阅读 579评论 0 1
  • 1.1==,is的使用 ·is是比较两个引用是否指向了同一个对象(引用比较)。 ·==是比较两个对象是否相等。 1...
    TENG书阅读 752评论 0 0
  • 晚上去看了新海诚的动画《你的名字》。在这之前,已经听好多人谈起这部电影了。包括好几篇不同作者不同角度的观后感。 这...
    薰微之恋阅读 465评论 0 2
  • 慢慢的习惯了新环境,状态也慢慢的调整正常。现在的办公室很安静,因为五一小长假,别人都放假了,就我们还上班。 天气变...
    九二九二阅读 147评论 0 0