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

    在python中,可迭代对象&迭代器&生成器的关系如下图:

    即:生成器是一种特殊的迭代器,迭代器是一种特殊的可迭代对象。

    可迭代对象

    如上图,这里x是一个列表(可迭代对象),其实正如第一张图所示,可迭代对象包含范围很广,如list是可迭代对象,dict是可迭代对象,set也是可迭代对象;
    可迭代对象必须含有__iter__方法,该方法返回一个迭代器对象。上图中,y和z是通过可迭代对象x利用iter方法得到的两个迭代器。

    迭代器

    迭代器内部持有一个状态,该状态用于记录当前迭代所在的位置,以方便下次迭代的时候获取正确的元素。不同于可迭代对象的宽泛,迭代器有具体的迭代器类型,比如list_iterator,set_iterator等(这些迭代器都可以通过相应的可迭代对象利用iter方法得到)。

    迭代器必须含有__next__方法,但是迭代器又属于可迭代对象,所以迭代器必须含有__iter__方法和__next__方法。

    生成器

    生成器也是一种迭代器

    若函数的定义体中有yield关键字,该函数就是生成器函数。调用生成器函数时,会返回一个生成器(generator)对象,即生成器函数是生成器产出的地方。

    无论是迭代器还是生成器,都属于python语法糖的一部分,都是为了简洁实用的目标。

    作者: python之家

    出处: http://www.cnblogs.com/pythonfl/

    本文版权归作者和博客园共有,转载时请标明本文出处;如对本文有疑问,欢迎邮件15256636585@qq.com联系;如发现文中内容侵犯到您的权利,请联系作者予以处理。

  • 相关阅读:
    5860. 从双倍数组中还原原数组
    5847. 找到所有的农场组
    5846. 找到数组的中间位置
    442. 数组中重复的数据
    1987. 不同的好子序列数目
    1986. 完成任务的最少工作时间段
    1985. 找出数组中的第 K 大整数
    1984. 学生分数的最小差值
    学习内容整合
    spring-DI和spring-mybatis整合
  • 原文地址:https://www.cnblogs.com/pythonfl/p/14402543.html
Copyright © 2011-2022 走看看