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