可迭代对象迭代器生成器的区别

Posted lpdeboke

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了可迭代对象迭代器生成器的区别相关的知识,希望对你有一定的参考价值。

迭代:

  • 迭代是访问集合元素的一种方法。

可迭代对象:

  • 可以被迭代的对象称为可迭代对象。

迭代器:

  • 迭代器是一个可以记住遍历位置的对象,迭代器对象从集合的第一个元素开始访问,直到所有元素被访问结束,迭代器只能前进不会后退。

判断一个对象是不是可迭代对象的方法:

from collections import Iterable
isinstance(list(range(100)),Iterable)

python中的可迭代对象有:

  • list、tuple、str、dict

可迭代对象的本质

  • 我们分析对可迭代对象进?迭代使?的过程,发现每迭代?次(即在for...in... 中每循环?次)都会返回对象中的下?条数据,?直向后读取数据直到迭代了所有数据后结束。那么,在这个过程中就应该有?个“?”去记录每次访问到了第?条数据,以便每次迭代都可以返回下?条数据。我们把这个能帮助我们进?数据迭代的“?”称为迭代器(Iterator)。

迭代器的本质:

  • 迭代器的实质是实现了next()方法的对象,常见的元组、列表、字典都是迭代器。
迭代器中重点关注两种方法:
  • __iter__方法:返回迭代器自身。可以通过python内建函数iter()调用。
  • __next__方法:当next方法被调用的时候,迭代器会返回它的下一个值,如果next方法被调用,但迭代器没有只可以返回,就会引发一个StopIteration异常。该方法可以通过 python 内建函数next()调用。

生成器:

  • 生成器(Generator)是创百建迭代器的简单而强大的工具。它们写起来就像是正规的函数,只是在需要返回数据的时候使用yield语句。每次next()被调度用时,生成器会返回它脱离的位置(它记忆语句最后一次执行的位置和所有的数据值)
生成器建立的两种方法
生成器函数
def inc1():
    for x in range(10000):
        yield x
g = inc1()
print(next(g))
print(next(g))
列表生成器
primeLi =  (i for i in range(1000) if i>2)
##如果要一个一个打印出来,可以通过 generator 的 next() 方法
print(next(primeLi))
print(next(primeLi))

以上是关于可迭代对象迭代器生成器的区别的主要内容,如果未能解决你的问题,请参考以下文章

代码详解生成器迭代器

迭代器,可迭代对象,生成器区别

迭代器,生成器

Python---迭代器,生成器,列表推导式

Python中迭代器和生成器的区别与联系

迭代器与装饰器