Python:笔记(7)——yield关键字
Python:笔记(7)——yield关键字
yield与生成器
所谓生成器是一个函数,它可以生成一个值的序列,以便在迭代中使用。函数使用yield关键字可以定义生成器对象。
一个例子
我们调用该函数,就会发现其中的代码不会开始执行
def countdown(n):
print('从%d开始减少'%n)
while(n>0):
yield n
n-=1
return countdown(10)
相应的,该函数返回一个生成器对象。接着该生成器对象就会在__next__被调用时执行函数,如:
c = countdown(10)
# <generator object countdown at 0x102d0b780>
print(c.__next__())
# 10
print(c.__next__())
# 9
调用next时,生成器函数开始执行语句,直至遇到yield语句为止。yield语句在函数执行停止的地方生成一个结果,直至再次调用next。然后继续执行yield之后的语句。
生成器的用法
通常不会在生成器上直接调用next()方法,而是通过for语句,sum()或一些消耗序列的其他操作使用生成器。
for n in countdown(5):
print(n) print(sum(countdown(5)))
协程与yield表达式
在函数内,yield语句还可以作为表达式使用,出现在赋值运算符的右边,例如:
def receiver():
print('Ready to receive')
while True:
n = (yield)
print(n) r = receiver()
r.__next__()
# Ready to receive
r.send(1)
# 1
r.send(2)
# 2
r.send('Hello')
# Hello
以这种方式使用yield语句的函数称为协程,向函数发送值时函数将执行。接收到值后,协程就会执行语句,直至遇到下一个yield语句。
说明:一开始必须先执行next函数,这样协程才能执行第一个yield表达式之前的语句
关闭协程
协程一般会不断地执行下去,除非被显式关闭或自己退出,显式关闭执行close语句即可。
Python:笔记(7)——yield关键字的更多相关文章
- (转) Python Generators(生成器)——yield关键字
http://blog.csdn.net/scelong/article/details/6969276 生成器是这样一个函数,它记住上一次返回时在函数体中的位置.对生成器函数的第二次(或第 n 次) ...
- 解析Python中的yield关键字
前言 python中有一个非常有用的语法叫做生成器,所利用到的关键字就是yield.有效利用生成器这个工具可以有效地节约系统资源,避免不必要的内存占用. 一段代码 def fun(): for i i ...
- python中的yield关键字
yield关键字一直困扰了我很久,一直也没有弄明白,现在将暂时理解的yield记录如下,供参考: 关键词:可迭代对象,生成器,迭代器 一.可迭代对象: 可迭代对象:可迭代对象是一个泛称,只要可以用fo ...
- 深入理解python中的yield关键字
想必大家都看过这样的代码: 上面的这段代码会计算0-9的平方并打印出来. 那么问题来了,这段代码和我们要说的东西有什么区别呢? 这里的关键字,yield,我在前面的文章里已经发过了.那么yield是什 ...
- python yield 关键字
最近看代码看到python里面的yield关键字,和我之前接触的语言好像都没有来着,我就查了查它的含义,大概理解如下: >>> def createGenerator(): ... ...
- python协程--yield和yield from
字典为动词“to yield”给出了两个释义:产出和让步.对于 Python 生成器中的 yield 来说,这两个含义都成立.yield item 这行代码会产出一个值,提供给 next(...) 的 ...
- Python:容器、迭代对象、迭代器、生成器及yield关键字
在了解Python的数据结构时,容器(container).可迭代对象(iterable).迭代器(iterator).生成器(generator).列表/集合/字典推导式(list, ...
- python笔记之itertools模块
python笔记之itertools模块 itertools模块包含创建有效迭代器的函数,可以用各种方式对数据进行循环操作,此模块中的所有函数返回的迭代器都可以与for循环语句以及其他包含迭代器(如生 ...
- Python笔记——类定义
Python笔记——类定义 一.类定义: class <类名>: <语句> 类实例化后,可以使用其属性,实际上,创建一个类之后,可以通过类名访问其属性 如果直接使用类名修改其属 ...
随机推荐
- ios 生成一个动态的随机的头像/随机数的操作
在写项目的时候,可能会遇到这种情况,用到集中随机的颜色,或者头像等, 首先:把所需要的图片放进一个数组当中 imgsAry = @[@"t1.png",@"t2.png& ...
- python2.0_day19_前端分页功能的实现
我们前面完成的客户纪录展示,只有4条,如果有上百条就不能在1页中全部展示了,那样是不人性化的.另外一次性取出来,数据量也比较大.假如现在有95条数据,我们想实现一个每页展示20条,那就分为5页.假如我 ...
- string permutation with upcase and lowcase
Give a string, which only contains a-z. List all the permutation of upcase and lowcase. For example, ...
- jQuery的一些小技巧()
1.判断某元素上是否绑定了某种类型的事件 var $events = $("#foo").data("events"); if( $events &&a ...
- ios 监听设备旋转方向
-(void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation { if(fromI ...
- windows下resin的配置部署与调试
配置 从Resin官网(http://www.caucho.com)下载Resin解压后,启动Resin,运行resin根目录下的resin.exe文件,运行期间将出现下图所示的命令提示符窗口. 表示 ...
- 170803、springboot jar包启动提示没有主清单属性
问题:SpringBoot打包成jar后运行提示没有主清单属性 解决: 补全maven中的bulid信息 <plugin> <groupId>org.springframewo ...
- poj1039 Pipe【计算几何】
含[求直线交点].[判断直线与线段相交]模板 Pipe Time Limit: 1000MS Memory Limit: 10000K Total Submissions:11940 Ac ...
- 使用google字体发生http://fonts.gstatic.com/s/ubuntu/v8/_aijTyevf54tkVDLy-dlnFtXRa8TVwTICgirnJhmVJw.woff2
我在使用adminTLE后台模板时,有时候会有 http://fonts.gstatic.com/s/ubuntu/v8/_aijTyevf54tkVDLy-dlnFtXRa8TVwTICgirnJh ...
- web框架们~Django~Flask~Tornado
1.web框架本质 2.Django 3.Flask 4.Tornado