zoukankan      html  css  js  c++  java
  • 可迭代对象、迭代器、生成器的区别

    迭代:

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

    可迭代对象:

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

    迭代器:

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

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

    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))
    
    
  • 相关阅读:
    JavaScript运行机制 Event Loop
    async 函数
    JavaScript Promise 对象
    pc端rest.css
    微信小程序公用样式类
    移动端base.css
    RegExp正则对象匹配规则
    RegExp正则相关方法
    mysql(五)事务
    mysql(四)海量数据优化
  • 原文地址:https://www.cnblogs.com/lpdeboke/p/12842311.html
Copyright © 2011-2022 走看看