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

    可以直接作用于for循环的对象统称为可迭代对象:Iterable

    可以被next()函数调用并不断返回下一个值的对象称为迭代器:Iterator

    可以这么认为:

      可以被next()函数调用并不断返回下一个值的Iterable称为迭代器:Iterator


    Iterator的计算是惰性的,只有在需要返回下一个数据时它才会计算,所以不能提前知道Iterator序列的长度和数据。

     而生成器不但可以作用于for循环,还可以被next()函数不断调用并返回下一个值,直到最后抛出StopIteration错误表示无法继续返回下一个值了。

    生成器都是Iterator对象,但list、dict、str虽然是Iterable,却不是Iterator。

    把list、dict、str等Iterable变成Iterator可以使用iter()函数,list、dict、str等Iterable使用iter()后 不是生成器,因为不是推算出来的:

    代码参考:

    from collections.abc import Iterator
    from collections.abc import Generator

    c = iter('bcd') #字符串是可迭代的,转换成迭代器
    print(c.__next__())
    print(c.__next__())
    print(next(c)) #其实调用的就是__next__()这个方法,for循环本质上也是通过不断调用next()函数实现
    print(isinstance(c,Iterator)) #返回 True 是一个迭代器
    print(isinstance(c,Generator)) #返回 False 不是一个生成器

    生成器 与迭代器 区别:
    生成器是一种特殊的迭代器,迭代器包含生成器,是迭代器不一定是生成器;



    参考:https://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c000/00143178254193589df9c612d2449618ea460e7a672a366000

    https://www.cnblogs.com/alex3714/articles/5765046.html

     

  • 相关阅读:
    Python基础:Python可变对象和不可变对象
    python内置函数
    python元组和序列
    python模块简单使用
    python循环技巧
    皮尔逊积矩相关系数
    Python基础:Python的变量和对象
    统计学中的自由度
    python 速成指南
    在SQL Server中,SQL语句的Insert支持一次插入多条记录
  • 原文地址:https://www.cnblogs.com/lighthouse/p/9340305.html
Copyright © 2011-2022 走看看