利⽤迭代器,可以在每次迭代读取数据(通过next()⽅法)时按照特定的规律进⾏⽣成。但是我们在实现⼀个迭代器时,关于当前迭代到的状态需要我们⾃⼰记录,进⽽才能根据当前状态⽣成下⼀个数据。为了达到记录当前状态,并配合next()函数进⾏迭代使⽤,我们可以采⽤更简便的语法,即⽣成器(generator)。⽣成器是⼀类特殊的迭代器。

创建⽣成器⽅法1

要创建⼀个⽣成器,有很多种⽅法。第⼀种⽅法很简单,只要把⼀个列表⽣成式的[]改成()

创建⽣成器⽅法2

generator⾮常强⼤。如果推算的算法比较复杂,⽤类似列表⽣成式的        for循环⽆法实现的时候,还可以⽤函数来实现。

在使⽤⽣成器实现的⽅式中,我们将原本在迭代器        __next__        ⽅法中实现的基本逻辑放到⼀个函数中来实现,但是将每次迭代返回数值的return换成了 yield,此时新定义的函数便不再是函数,⽽是⼀个⽣成器了。

总结

1.使⽤了yield关键字的函数不再是函数,⽽是⽣成器。(使⽤了yield的函数就是⽣成器)

2.yield关键字有两点作⽤:

保存当前运⾏状态(断点),然后暂停执行,即将⽣成器(函数)挂起

将yield关键字后⾯表达式的值作为返回值,此时可以理解为起到了return的作⽤

可以使⽤next()函数让⽣成器从断点处继续执行,即唤醒⽣成器(函数)

Python3中的⽣成器可以使⽤return返回最终运⾏的返回值,⽽Python2 中的⽣成器不允许使⽤return返回⼀个返回值(即可以使⽤return从⽣成器中退出,但return后不能有任何表达式)。

使send唤醒

我们除了可以使⽤next()函数来唤醒⽣成器继续执⾏外,还可以使⽤send()函数来唤醒执⾏。使⽤send()函数的⼀个好处是可以在唤醒的同时向断点处传入⼊⼀个附加数据。

注意:  

 gen_obj.__next__()     等价于 gen_obj.send(none)



python中的生成器相关推荐

  1. python编程有什么用处-python中的生成器是什么?生成器有什么用处?

    在以下的文章之中我们来了解一下什么是python中生成器.了解一下python生成器是什么,以及生成器在python编程之中能起到什么样的作用. python生成器是什么? 通过列表生成式,我们可以直 ...

  2. python生成器和迭代器作用_浅谈Python中的生成器和迭代器

    迭代器 迭代器协议 对象必须提供一个next方法,执行该方法要么返回迭代中的下一项,要么返回一个异常来终止本次迭代.(只能往前走,不能往后退!) 迭代器对象 遵循了(实现了)迭代器协议的对象.(对象内 ...

  3. python的 是什么-python中的生成器是什么?生成器有什么用处?

    在以下的文章之中我们来了解一下什么是python中生成器.了解一下python生成器是什么,以及生成器在python编程之中能起到什么样的作用. python生成器是什么? 通过列表生成式,我们可以直 ...

  4. Python中的生成器与迭代器

    Python中的生成器与迭代器 转自:https://www.liaoxuefeng.com/wiki/1016959663602400/1017323698112640,推荐去该链接读原文,有习题和 ...

  5. python 迭代器协议_浅谈Python中的生成器和迭代器

    迭代器 迭代器协议 对象必须提供一个next方法,执行该方法要么返回迭代中的下一项,要么返回一个异常来终止本次迭代.(只能往前走,不能往后退!) 迭代器对象 遵循了(实现了)迭代器协议的对象.(对象内 ...

  6. python的装饰器迭代器与生成器_详解python中的生成器、迭代器、闭包、装饰器

    迭代是访问集合元素的一种方式.迭代器是一个可以记住遍历的位置的对象.迭代器对象从集合的第一个元素开始访问,直到所有的元素被访问完结束.迭代器只能往前不会后退. 1|1可迭代对象 以直接作用于 for ...

  7. python中的生成器和迭代器:Generator和Iterator以及yield

    文章目录 Iterator Generator 构造生成器 Iterator 即迭代器,源自可迭代对象,例如list,tuple,dict,set,str等(凡是含有__iter__方法的,都是可迭代 ...

  8. Python中的生成器与yield

    对于python中的yield有些疑惑,然后在StackOverflow上看到了一篇回答,所以搬运过来了,英文好的直接看原文吧. 可迭代对象 当你创建一个列表的时候,你可以一个接一个地读取其中的项.一 ...

  9. 一文了解 Python 中的生成器

    前言 生成器很容易实现,但却不容易理解.生成器也可用于创建迭代器,但生成器可以用于一次返回一个可迭代的集合中一个元素.现在来看一个例子: def yrange(n):i = 0while i < ...

  10. python中的生成器和迭代器

    欢迎关注"生信修炼手册"! 迭代是python中最常见的操作,比如遍历一个列表 >>> a = [1, 2, 3] >>> for i in a ...

最新文章

  1. Visual Studio 项目目录下的bin目录和 obj目录
  2. mysql 数据库 额外_mysql – 拥有“额外”数据库查询有多糟糕?
  3. 雨雪出行伴侣,优质PVC时尚鞋套,防滑/防水更耐磨
  4. 2018年最受大家欢迎的五大机器学习工具和五大数据学习工具
  5. python n个list如何组成矩阵_通过学习在processing中操作图片,掌握python 列表操作...
  6. LeetCode 947. 移除最多的同行或同列石头(并查集)
  7. Web.XML配置详细说明
  8. ambari 修改服务器名,Ambari修改主页面方法
  9. 组合赋权法之matlab
  10. Kafka和Unix管道的示例
  11. MAC安装ant的办法
  12. mysql用户订阅数据表设计_小程序商城-用户表 - 数据库设计 - 数据库表结构 - 果创云...
  13. 明翰游戏学笔记V0.2(持续更新)
  14. Springboot AMR格式音频转换MP3
  15. ZFS的ashift参数解读
  16. NFS挂载失败: bad option; for several filesystems (e.g. nfs, cifs) you might need a /sbin/mount.
  17. 2020-12-28 微信支付二面
  18. 计算机对金融学的帮助,计算机在金融业中的作用
  19. 《大数据》第七章 聚类 K-means算法 BFR算法 CURE算法
  20. Docker搭建、启动、关闭MySQL服务

热门文章

  1. 使用docker 起容器配置负载均衡(加权)
  2. 鸟哥linux 私房菜
  3. day3-python学习笔记(三)字典、元组
  4. DB2操作指南及命令大全word版
  5. 常见排序算法的C#实现
  6. Jquery 实现原理之 Ajax
  7. 别用symbolicatecrash来解析crash Log了
  8. C++ 添加程序图标到我的电脑
  9. 1057: [ZJOI2007]棋盘制作 - BZOJ
  10. [网络收集]Web.config配置文件详解