美文网首页
xy之可迭代对象 vs 迭代器 vs 生成器

xy之可迭代对象 vs 迭代器 vs 生成器

作者: __XY__ | 来源:发表于2017-07-27 10:14 被阅读0次

总关系图

迭代器vs可迭代对象.png

容器包括哪些

list,
set,fronzenset...
dict, defaultdict, OrderedDict, Counter, …
tuple, namedtuple, …
str

可迭代对象vs 迭代器

>>> x = [1,2,3]
>>> y = iter(x)
>>> z = iter(x)
>>> next(y)
1
>>> next(y)
2
>>> next(z)
1
>>> type(x)
<class 'list'>
>>> type(y)
<class 'list_iterator'>
可迭代的类中,一般实现以下两个方法,__iter__()以及__next()__方法,__iter__()方法返回self。

for循环的时候内部原理

for循环.png

什么是迭代器

那么什么是迭代器呢?任何具有next()方法的对象都是迭代器,对迭代器调用next()方法可以获取下一个值。而至于它使如何产生这个值的,跟它能否成为一个迭代器并没有关系。

生成器

-任意生成器都是迭代器(反过来不成立)
-任意生成器,都是一个可以延迟创建值的工厂

生成器类型

生成器函数以及生成器表达式(yield)

iter函数内部实现

  • 检查对象是否实现了 iter 方法,如果实现了就调用它,获取
    一个迭代器。
  • 如果没有实现 iter 方法,但是实现了 getitem 方法,
    Python 会创建一个迭代器,尝试按顺序(从索引 0 开始)获取元素。
  • 如果尝试失败,Python 抛出 TypeError 异常,通常会提示“C object
    is not iterable”(C 对象不可迭代),其中 C 是目标对象所属的类。
  • 任何 Python 序列都可迭代的原因是,它们都实现了 getitem
    法。其实,标准的序列也都实现了 iter 方法,因此你也应该这么
    做。之所以对 getitem 方法做特殊处理,是为了向后兼容,而未
    来可能不会再这么做

参考

《流畅的python》

相关文章

  • xy之可迭代对象 vs 迭代器 vs 生成器

    总关系图 容器包括哪些 list,set,fronzenset...dict, defaultdict, Orde...

  • Python基础-16生成器-迭代器

    16.生成器-迭代器     可循环迭代的对象称为可迭代对象,迭代器和生成器函数是可迭代对象,在Python中提供...

  • Python可迭代对象,迭代器,生成器关系

    列表,元组,字符串,迭代器,生成器都是可迭代对象。所以,可迭代对象不一定是迭代器,生成器。 将一个可迭代对象传递给...

  • 迭代器

    可迭代对象(Iterable): for迭代器(Iterator): for + next生成器属于迭代器。 验...

  • 可迭代对象、迭代器、生成器

    可迭代对象 --> 迭代器 --> 生成器; 可迭代对象:实现了__iter__()方法的对象,该方法返回迭代对象...

  • yield and Iterator

    Generator(生成器) 生成器是特殊的迭代器,迭代器不一定是生成器。 生成器与迭代器均是可迭代对象。 目前学...

  • 迭代机制

    可迭代对象、迭代器、生成器、生成式区别 a. 可迭代对象: 一个对象能够被迭代的使用,这个对象就是可迭代对象 b....

  • python生成器、迭代器、可迭代对象

    可迭代对象 迭代器 生成器 1.可迭代对象 可以被for循环遍历的对象成为可迭代对象,其中包括list、str、t...

  • 2-1迭代对象、迭代器、生成器

    可迭代对象、迭代器和生成器的关系 可迭代对象 可迭代对象实现某种接口,对与列表内部实现了__iter__()方法,...

  • Python迭代器和生成器

    所有的生成器都是迭代器;从可迭代的对象中获取迭代器 一、序列可迭代的原因:iter函数 迭代对象x时,自动调用it...

网友评论

      本文标题:xy之可迭代对象 vs 迭代器 vs 生成器

      本文链接:https://www.haomeiwen.com/subject/dnzakxtx.html