码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2020-05-07 13:18:21      阅读:61      评论:0      收藏:0      [点我收藏+]

标签:位置   需要   两种   iterable   port   通过   调度   结束   工具   

迭代:

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

可迭代对象:

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

迭代器:

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

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

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))

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

标签:位置   需要   两种   iterable   port   通过   调度   结束   工具   

原文地址:https://www.cnblogs.com/lpdeboke/p/12842311.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!