生成器(generator)概念

生成器不会把结果保存在一个系列中,而是保存生成器的状态,在每次进行迭代时返回一个值,直到遇到StopIteration异常结束。

生成器语法

生成器表达式: 通列表解析语法,只不过把列表解析的[]换成()
生成器表达式能做的事情列表解析基本都能处理,只不过在需要处理的序列比较大时,列表解析比较费内存。

>>> gen = (x**2 for x in range(5))
>>> gen
<generator object <genexpr> at 0x0000000002FB7B40>
>>> for g in gen:
...   print(g, end='-')
...
0-1-4-9-16-
>>> for x in [0,1,2,3,4,5]:
...   print(x, end='-')
...
0-1-2-3-4-5-

生成器函数: 在函数中如果出现了yield关键字,那么该函数就不再是普通函数,而是生成器函数。

但是生成器函数可以生产一个无线的序列,这样列表根本没有办法进行处理。

yield 的作用就是把一个函数变成一个 generator,带有 yield 的函数不再是一个普通函数,Python 解释器会将其视为一个 generator。

下面为一个可以无穷生产奇数的生成器函数:

def odd():n=1while True:yield nn+=2
odd_num = odd()
count = 0
for o in odd_num:if count >=5: breakprint(o)count +=1

yield 与 return

在一个生成器中,如果没有return,则默认执行到函数完毕时返回StopIteration;

>>> def g1():
...     yield 1
...
>>> g=g1()
>>> next(g)    #第一次调用next(g)时,会在执行完yield语句后挂起,所以此时程序并没有执行结束。
1
>>> next(g)    #程序试图从yield语句的下一条语句开始执行,发现已经到了结尾,所以抛出StopIteration异常。
Traceback (most recent call last):File "<stdin>", line 1, in <module>
StopIteration
>>>

如果遇到return,如果在执行过程中 return,则直接抛出 StopIteration 终止迭代。

>>> def g2():
...     yield 'a'
...     return
...     yield 'b'
...
>>> g=g2()
>>> next(g)    #程序停留在执行完yield 'a'语句后的位置。
'a'
>>> next(g)    #程序发现下一条语句是return,所以抛出StopIteration异常,这样yield 'b'语句永远也不会执行。
Traceback (most recent call last):File "<stdin>", line 1, in <module>
StopIteration

如果在return后返回一个值,那么这个值为StopIteration异常的说明,不是程序的返回值。

生成器没有办法使用return来返回值。

>>> def g3():
...     yield 'hello'
...     return 'world'
...
>>> g=g3()
>>> next(g)
'hello'
>>> next(g)
Traceback (most recent call last):File "<stdin>", line 1, in <module>
StopIteration: world

生成器支持的方法更详细请看http://python.jobbole.com/81911/

转载于:https://www.cnblogs.com/JayeHe/p/6926319.html

初学python之生成器相关推荐

  1. 初学python的30个操作难点汇总(入门篇)希望对你有帮助

    初学Python的人总会遇到这样或者那样的问题,在我学习Python的这段时间我总结了自己的29个问题,具体如下: 1 在cmd下 盘与盘之间的切换 直接 D或d: 就好 2 查找当前盘或者文件下面的 ...

  2. python使用生成器生成浮点数列表、使用生成器生成(正)负的浮点数列表

    python使用生成器生成浮点数列表.使用生成器生成(正)负的浮点数列表 目录 pyth

  3. python去除中间空格只留一个_汇总初学Python的21个操作难点,看完别再去踩坑了...

    初学Python时,不管是容易的操作难点,还是困难的操作难点,都是要一步步的去踩坑摸索得出结果,小编今天就给大家汇总初学时Python的21个操作难点,看完之后可别再去掉到同样的坑里去了. 1 查找当 ...

  4. 初学Python常见异常错误,总有一处你会遇到!

    初学Python常见异常错误,总有一处你会遇到! 参考文章: (1)初学Python常见异常错误,总有一处你会遇到! (2)https://www.cnblogs.com/xxpythonxx/p/1 ...

  5. 初学 Python(十三)——匿名函数

    初学 Python(十三)--匿名函数 初学 Python,主要整理一些学习到的知识点,这次是匿名函数. # -*- coding:utf-8 -*- #关键字lambda定义的函数都是匿名函数 #做 ...

  6. 安装完python后、还需要安装什么-初学 Python 需要安装哪些软件?

    原标题:初学 Python 需要安装哪些软件? 自动配置.有效求助.协作编程.版本控制.一站式解决 Python 新手练习中的痛点. 痛点 这个学期,我在北得克萨斯大学(University of N ...

  7. 使用python用什么软件-python开发工具有哪些(初学python用什么软件)

    python开发工具有哪些 一.jupyternotebookIDE简介-五星推荐 jupyternotebook是python学习与开发的一款简介的IDE,是一款Web应用程序,便于创建和编写文档等 ...

  8. 自学python爬虫要多久-初学Python爬虫要学多久?原来这么快

    大家在学python的时候肯定会遇到很多难题,以及对于新技术的追求,这里推荐一下我们的Python学习扣qun:七衣衣九七七巴而五(数字的谐音)转换下可以找到了,这里是python学习者聚集地!!同时 ...

  9. python编程用什么电脑好-初学Python编程看哪些书比较好?

    原标题:初学Python编程看哪些书比较好? 我推荐你一些学习Python编程适合看的书,你可以试着看看是不是可以看懂,是不是感兴趣......书中藏着你想要的答案,下面就为大家揭秘学习Python编 ...

最新文章

  1. OpenJDK 编译-Linux环境
  2. python3最新版本-Python3第三方组件最新版本追踪实现
  3. TensorFlow损失函数(loss function) 2017-08-14 11:32 125人阅读 评论(0) 收藏 举报 分类: 深度学习及TensorFlow实现(10) 版权声明:
  4. 机器人 沈为民_会变形的机器人
  5. php 把一个数组分成有n个元素的二维数组的算法
  6. TCL电子港股暴涨10% 股价创5年新高
  7. MySQL--存储引擎篇
  8. java调用notify方法_Java线程,下面程序不知怎么调用notify方法唤醒test1,请指正
  9. 0基础python入门书籍 excel_零基础学Python3(23):Excel 基础操作(上)
  10. 访问线上平台出现http状态码“502”和“504”
  11. OrCAD(一)简介、安装与基本使用
  12. stm32实验报告心得体会_stm32实验报告心得体会
  13. 可以丢掉SGD和Adam了,新的深度学习优化器Ranger:RAdam + LookAhead强强结合
  14. IBM服务器raid5崩溃数据恢复方法
  15. Microsoft Xps Document Writer 虚拟打印机安装
  16. HHKB键盘使用说明书
  17. 席慕容的诗歌——《我愿为莲》
  18. Windows server 2019从头搭建私网***
  19. 机器人瓦力有什么西方的风格_机器人瓦力观后感 英文
  20. Java 数据转换/进制转换 工具类

热门文章

  1. 短视频自媒体成功的秘诀就一个字:真
  2. 盘点国内高投资低票房的电影巨制
  3. 宿舍电源额定500w,我的电脑550w的,有什么办法能解决吗?
  4. Q4_一个事物领导另一个
  5. 对xml文件的增删改查及读写
  6. QLable——标签
  7. sql还原数据库备份数据库_如何获取SQL数据库还原历史记录
  8. ssis组件_使用SSIS Hadoop组件连接到Apache Hive和Apache Pig
  9. final关键字详解
  10. HDU 2068 Choose the best route