可迭代:在Python中如果一个对象有__iter__( )方法或__getitem__( )方法,则称这个对象是可迭代的(Iterable);其中__iter__( )方法的作用是让对象可以用for ... in循环遍历,__getitem__( )方法是让对象可以通过“实例名[index]”的方式访问实例中的元素。换句话说,两个条件只要满足一条,就可以说对象是可迭代的。显然列表List、元组Tuple、字典Dictionary、字符串String等数据类型都是可迭代的。当然因为Python的“鸭子类型”,我们自定义的类中只要实现了__iter__( )方法或__getitem__( )方法,也是可迭代的。

迭代器:在Python中如果一个对象有__iter__( )方法和__next__( )方法,则称这个对象是迭代器(Iterator);其中__iter__( )方法是让对象可以用for ... in循环遍历,__next__( )方法是让对象可以通过next(实例名)访问下一个元素。注意:这两个方法必须同时具备,才能称之为迭代器。列表List、元组Tuple、字典Dictionary、字符串String等数据类型虽然是可迭代的,但都不是迭代器,因为他们都没有next( )方法。

上图通过isinstance( )函数分别判断列表、元组、字典、字符串是不是可迭代或迭代器。通过对定义的分析和比较我们得知:迭代器都是可迭代的,但可迭代的不一定是迭代器;可用for ... in循环的都是可迭代的,可用next( )遍历的才是迭代器;next( )是单向的,一次只获取一个元素,获取到最后一个元素后停止;在可迭代的对象中提前存储了所有的元素,而迭代器是惰性的,只有迭代到了某个元素,该元素才会生成,迭代之前元素可以是不存在的,迭代之后元素也可以被销毁,因此迭代器在处理大量数据甚至无限数据时具有加载数据快、占用内存小等优势。

生成迭代器的几种方式

1.类中实现__iter__( )方法和__next__( )方法,归功于Python的鸭子类型,我们只要在自定义的类中实现了这两个方法,这个类的实例对象就是迭代器,不仅可以用for ... in循环,也可以用next( )遍历。在__next__( )方法中必须对迭代进行检查,超出范围则触发 StopIteration 异常。

2.iter( )函数,Python中的iter( object[, sentinel])函数可用来返回一个迭代器对象,iter( )函数只传入一个参数时,参数必须为可迭代对象;当使用第二个参数sentinel(哨兵)时,第一个参数必须是一个可调用对象。

生成器(Generator)是创建迭代器的简单而强大的工具

Python中提供的生成器:

1.生成器函数:常规函数定义,但是,使用yield语句而不是return语句返回结果。yield语句一次返回一个结果,在每个结果中间,挂起函数的状态,以便下次重它离开的地方继续执行

2.生成器表达式:类似于列表推导,但是,生成器返回按需产生结果的一个对象,而不是一次构建一个结果列表

转载于:https://www.cnblogs.com/weidaijie/p/10517173.html

关于可迭代对象、迭代器和生成器相关推荐

  1. Python要想学得好,【容器/可迭代对象/迭代器/生成器】少不了,稳扎稳打学Python!

    在刚开始学Python的时候,是不是经常会听到大佬们在讲容器.可迭代对象.迭代器.生成器.列表/集合/字典推导式等等众多概念,其实这不是大佬们没事就搁那扯专业术语来装B,而是这些东西都得要明白的,光知 ...

  2. python 函数可以作为容器对象的元素_11.Python初窥门径(函数名,可迭代对象,迭代器)...

    python(函数名,可迭代对象,迭代器) 一.默认参数的坑 # 比较特殊,正常来说临时空间执行结束后应该删除,但在这里不是. def func(a,l=[]): l.append(a) return ...

  3. python可迭代对象 迭代器生成器_Python可迭代对象、迭代器和生成器

    8.1 可迭代对象(Iterable) 大部分对象都是可迭代,只要实现了__iter__方法的对象就是可迭代的. __iter__方法会返回迭代器(iterator)本身,例如: >>&g ...

  4. python中迭代器和可迭代对象的区别_Python 可迭代对象迭代器生成器的区别

    生成器是一种特殊的迭代器,生成器自动实现了"迭代器协议"(即__iter__和next方法),不需要再手动实现两方法. 首先从字面意思来解释Iterable和Iterator的区别 ...

  5. 【Python】【容器 | 迭代对象 | 迭代器 | 生成器 | 生成器表达式 | 协程 | 期物 | 任务】...

    Python 的 asyncio 类似于 C++ 的 Boost.Asio. 所谓「异步 IO」,就是你发起一个 IO 操作,却不用等它结束,你可以继续做其他事情,当它结束时,你会得到通知. Asyn ...

  6. Python练习 | Python 可迭代对象 迭代器

    博主github:https://github.com/MichaelBeechan 博主CSDN:https://blog.csdn.net/u011344545 在使用Python的过程中,很容易 ...

  7. 5.Python基础语法(函数/条件控制/循环语句/可迭代对象/迭代器/生成器/对象赋值/浅复制/深复制)

    5.1 函数 在中学数学中我们知道y=f(x)代表着函数,x是自变量,y是函数f(x)的值.在程序中,自变量(x)可以代表任意的数据类型,可以是字符串.列表.字典.对象,可以是我们认为的任何东西. 示 ...

  8. python可迭代对象,迭代器,生成器

    容器是一系列元素的集合,str.list.set.dict.file.sockets对象都可以看作是容器,容器都可以被迭代(用在for,while等语句中),因此他们被称为可迭代对象. 可迭代对象实现 ...

  9. python手写一个迭代器_搞清楚 Python 的迭代器、可迭代对象、生成器

    很多伙伴对 Python 的迭代器.可迭代对象.生成器这几个概念有点搞不清楚,我来说说我的理解,希望对需要的朋友有所帮助. 1 迭代器协议 迭代器协议是核心,搞懂了这个,上面的几个概念也就很好理解了. ...

  10. Python3---可迭代对象(iterable)、迭代器(iterator)、生成器(generator)的理解和应用

    文章目录 1. 可迭代对象(iterable) 1).可迭代性----for循环原理 2).可迭代对象的特征: 3).可迭代对象的源码: 2. 迭代器(iterator) 1).迭代器的源码: 2). ...

最新文章

  1. Ruby的Singleton method
  2. java Hashtable的遍历方法
  3. web工程中spring+ibatis的单元测试--转载
  4. 随手小记:快速适应未必是个好策略
  5. 2018年工业机器人销量排位_2020年全球工业机器人现状与竞争情况 中国为全球最大供应国...
  6. 我敢打赌,99%的电子工程师都掉进过这29个坑!
  7. 深度学习之基于卷积神经网络(VGG16CNN)实现海贼王人物识别
  8. 网站开启Gzip压缩-apache
  9. 回溯法采用的搜索策略_强化学习基础篇(三十四)基于模拟的搜索算法
  10. SqlAlchemy ORM
  11. 和最大的连续子数组 Maximum Subarray
  12. Atiit 如何手写词法解析器
  13. Cocos2d-x 引擎概要
  14. c语言中输入输出基本格式
  15. MATLAB实现离散傅里叶变换DFT
  16. word小技巧 将图片批量居中
  17. JQuery学习——标签页(Tabs)
  18. BlazeFace:一种非典型专用检测器
  19. 多媒体开发之---开源库ffmeg的log之子解析
  20. Convolutional Neural Networks on Graphs with Fast Localized Spectral Filtering论文解读( and code)

热门文章

  1. Flink + Iceberg,腾讯百亿级实时数据入湖实战
  2. 【直播提醒】荷小鱼:K12 在线教育应用的开发实践
  3. Code Review效率低?来试试智能语法服务
  4. 如何让页面动起来?支付宝2020新春红包前端3D技术揭秘
  5. 如何基于Weex实现创新交互体验?手淘开源技术BindingX案例解析
  6. php+spl+栈,PHP SPL标准库之数据结构栈(SplStack)介绍
  7. 告警系统的一些痛点思考
  8. Demo能为游戏带来什么?
  9. 曝台积电芯片要涨价:2022年至少上调10%
  10. 关乎每个人!2021年5月1日起实施