初学python之生成器
生成器(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之生成器相关推荐
- 初学python的30个操作难点汇总(入门篇)希望对你有帮助
初学Python的人总会遇到这样或者那样的问题,在我学习Python的这段时间我总结了自己的29个问题,具体如下: 1 在cmd下 盘与盘之间的切换 直接 D或d: 就好 2 查找当前盘或者文件下面的 ...
- python使用生成器生成浮点数列表、使用生成器生成(正)负的浮点数列表
python使用生成器生成浮点数列表.使用生成器生成(正)负的浮点数列表 目录 pyth
- python去除中间空格只留一个_汇总初学Python的21个操作难点,看完别再去踩坑了...
初学Python时,不管是容易的操作难点,还是困难的操作难点,都是要一步步的去踩坑摸索得出结果,小编今天就给大家汇总初学时Python的21个操作难点,看完之后可别再去掉到同样的坑里去了. 1 查找当 ...
- 初学Python常见异常错误,总有一处你会遇到!
初学Python常见异常错误,总有一处你会遇到! 参考文章: (1)初学Python常见异常错误,总有一处你会遇到! (2)https://www.cnblogs.com/xxpythonxx/p/1 ...
- 初学 Python(十三)——匿名函数
初学 Python(十三)--匿名函数 初学 Python,主要整理一些学习到的知识点,这次是匿名函数. # -*- coding:utf-8 -*- #关键字lambda定义的函数都是匿名函数 #做 ...
- 安装完python后、还需要安装什么-初学 Python 需要安装哪些软件?
原标题:初学 Python 需要安装哪些软件? 自动配置.有效求助.协作编程.版本控制.一站式解决 Python 新手练习中的痛点. 痛点 这个学期,我在北得克萨斯大学(University of N ...
- 使用python用什么软件-python开发工具有哪些(初学python用什么软件)
python开发工具有哪些 一.jupyternotebookIDE简介-五星推荐 jupyternotebook是python学习与开发的一款简介的IDE,是一款Web应用程序,便于创建和编写文档等 ...
- 自学python爬虫要多久-初学Python爬虫要学多久?原来这么快
大家在学python的时候肯定会遇到很多难题,以及对于新技术的追求,这里推荐一下我们的Python学习扣qun:七衣衣九七七巴而五(数字的谐音)转换下可以找到了,这里是python学习者聚集地!!同时 ...
- python编程用什么电脑好-初学Python编程看哪些书比较好?
原标题:初学Python编程看哪些书比较好? 我推荐你一些学习Python编程适合看的书,你可以试着看看是不是可以看懂,是不是感兴趣......书中藏着你想要的答案,下面就为大家揭秘学习Python编 ...
最新文章
- OpenJDK 编译-Linux环境
- python3最新版本-Python3第三方组件最新版本追踪实现
- TensorFlow损失函数(loss function) 2017-08-14 11:32 125人阅读 评论(0) 收藏 举报 分类: 深度学习及TensorFlow实现(10) 版权声明:
- 机器人 沈为民_会变形的机器人
- php 把一个数组分成有n个元素的二维数组的算法
- TCL电子港股暴涨10% 股价创5年新高
- MySQL--存储引擎篇
- java调用notify方法_Java线程,下面程序不知怎么调用notify方法唤醒test1,请指正
- 0基础python入门书籍 excel_零基础学Python3(23):Excel 基础操作(上)
- 访问线上平台出现http状态码“502”和“504”
- OrCAD(一)简介、安装与基本使用
- stm32实验报告心得体会_stm32实验报告心得体会
- 可以丢掉SGD和Adam了,新的深度学习优化器Ranger:RAdam + LookAhead强强结合
- IBM服务器raid5崩溃数据恢复方法
- Microsoft Xps Document Writer 虚拟打印机安装
- HHKB键盘使用说明书
- 席慕容的诗歌——《我愿为莲》
- Windows server 2019从头搭建私网***
- 机器人瓦力有什么西方的风格_机器人瓦力观后感 英文
- Java 数据转换/进制转换 工具类