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))
    
    
  • 相关阅读:
    mysql的IFNULL()函数FLOOR(),ROUND()函数
    何时有个内连接何时用外连接
    Mybatis中什么时候应该声明jdbcType
    FFPEG 转码记录------解决了有流,但是没有码率和FPS?
    HLS播放权限测试记录
    Redis-benchmark测试Redis性能
    JavaScript基础知识之——Location 对象详解
    Redis基础知识之—— 缓存应用场景
    Redis基础知识之—— hset 和hsetnx 的区别
    SAGE入门:开源数学系统之集大成者
  • 原文地址:https://www.cnblogs.com/lpdeboke/p/12842311.html
Copyright © 2011-2022 走看看