对于普通的生成器,第一个next调用,相当于启动生成器,会从生成器函数的第一行代码开始执行,直到第一次执行完yield语句(第4行)后,跳出生成器函数。

然后第二个next调用,进入生成器函数后,从yield语句的下一句语句(第5行)开始执行,然后重新运行到yield语句,执行后,跳出生成器函数,后面再次调用next,依次类推。
下面是一个列子:
def consumer():
r = 'here'
for i in xrange(3):
yield r
r = '200 OK'+ str(i)
c = consumer()
n1 = c.next()
n2 = c.next()
n3 = c.next()
了解了next()如何让包含yield的函数执行后,我们再来看另外一个非常重要的函数send(msg)。其实next()和send()在一定意义上作用是相似的,区别是send()可以传递yield表达式的值进去,而next()不能传递特定的值,只能传递None进去。因此,我们可以看做c.next() 和 c.send(None) 作用是一样的。
需要提醒的是,第一次调用时,请使用next()语句或是send(None),不能使用send发送一个非None的值,否则会出错的,因为没有Python yield语句来接收这个值。
下面来着重说明下send执行的顺序。当第一次send(None)(对应11行)时,启动生成器,从生成器函数的第一行代码开始执行,直到第一次执行完yield(对应第4行)后,跳出生成器函数。这个过程中,n1一直没有定义。
下面运行到send(1)时,进入生成器函数,注意这里与调用next的不同。这里是从第4行开始执行,把1赋值给n1,但是并不执行yield部分。下面继续从yield的下一语句继续执行,然后重新运行到yield语句,执行后,跳出生成器函数。
即send和next相比,只是开始多了一次赋值的动作,其他运行流程是相同的。
def consumer():
r = 'here'
while True:
n1 = yield r
if not n1:
return
print('[CONSUMER] Consuming %s...' % n1)
r = '200 OK'+str(n1)
def produce(c):
aa = c.send(None)
n = 0
while n < 5:
n = n + 1
print('[PRODUCER] Producing %s...' % n)
r1 = c.send(n)
print('[PRODUCER] Consumer return: %s' % r1)
c.close()
c = consumer()
produce(c)
运行结果:
[PRODUCER] Producing 1... [CONSUMER] Consuming 1... [PRODUCER] Consumer return: 200 OK1 [PRODUCER] Producing 2... [CONSUMER] Consuming 2... [PRODUCER] Consumer return: 200 OK2 [PRODUCER] Producing 3... [CONSUMER] Consuming 3... [PRODUCER] Consumer return: 200 OK3 [PRODUCER] Producing 4... [CONSUMER] Consuming 4... [PRODUCER] Consumer return: 200 OK4 [PRODUCER] Producing 5... [CONSUMER] Consuming 5... [PRODUCER] Consumer return: 200 OK5
以上这篇浅谈Python生成器generator之next和send的运行流程(详解)就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持。
# python
# 生成器
# send
# python的列表生成式
# 生成器和generator对象你了解吗
# python生成器generator:深度学习读取batch图片的操作
# Python生成器generator原理及用法解析
# Python迭代器iterator生成器generator使用解析
# Python generator生成器和yield表达式详解
# Python生成器generator用法示例
# python生成器generator用法实例分析
# Python生成器(Generator)详解
# Python浅析生成器generator的使用
# 给大家
# 列子
# 的是
# 是一个
# 第一个
# 一句
# 是从
# 我们可以
# 希望能
# 请使用
# 下一
# 第二个
# 再来
# 非常重要
# 另外一个
# 这篇
# 在一
# 一直没有
# 浅谈
# 则会
相关文章:
宝盒自助建站智能生成技巧:SEO优化与关键词设置指南
免费的流程图制作网站有哪些,2025年教师初级职称申报网上流程?
建站之星手机一键生成:多端自适应+小程序开发快速建站指南
如何在Windows虚拟主机上快速搭建网站?
建站上传速度慢?如何优化加速网站加载效率?
建站之星在线客服如何快速接入解答?
定制建站流程解析:需求评估与SEO优化功能开发指南
大连网站制作费用,大连新青年网站,五年四班里的视频怎样下载啊?
湖南网站制作公司,湖南上善若水科技有限公司做什么的?
如何零基础开发自助建站系统?完整教程解析
如何通过二级域名建站提升品牌影响力?
如何用AWS免费套餐快速搭建高效网站?
如何基于云服务器快速搭建网站及云盘系统?
义乌企业网站制作公司,请问义乌比较好的批发小商品的网站是什么?
高防服务器租用指南:配置选择与快速部署攻略
如何用免费手机建站系统零基础打造专业网站?
如何快速搭建自助建站会员专属系统?
专业网站建设制作报价,网页设计制作要考什么证?
常州企业网站制作公司,全国继续教育网怎么登录?
大学网站设计制作软件有哪些,如何将网站制作成自己app?
如何高效利用200m空间完成建站?
Android自定义控件实现温度旋转按钮效果
C++中的Pimpl idiom是什么,有什么好处?(隐藏实现)
如何通过.red域名打造高辨识度品牌网站?
建站之星官网登录失败?如何快速解决?
c# 在ASP.NET Core中管理和取消后台任务
建站主机如何选?高性价比方案全解析
建站之星微信建站一键生成小程序+多端营销系统
,有什么在线背英语单词效率比较高的网站?
北京网页设计制作网站有哪些,继续教育自动播放怎么设置?
北京制作网站的公司排名,北京三快科技有限公司是做什么?北京三快科技?
网站制作的步骤包括,正确网址格式怎么写?
如何确保FTP站点访问权限与数据传输安全?
网站制作新手教程,新手建设一个网站需要注意些什么?
陕西网站制作公司有哪些,陕西凌云电器有限公司官网?
Java解压缩zip - 解压缩多个文件或文件夹实例
北京企业网站设计制作公司,北京铁路集团官方网站?
成都网站制作公司哪家好,四川省职工服务网是做什么用?
网站制作的软件有哪些,制作微信公众号除了秀米还有哪些比较好用的平台?
香港服务器网站推广:SEO优化与外贸独立站搭建策略
建站之星备案是否影响网站上线时间?
建站之星上传入口如何快速找到?
网站制作多少钱一个,建一个论坛网站大约需要多少钱?
做企业网站制作流程,企业网站制作基本流程有哪些?
如何通过虚拟主机快速搭建个人网站?
C#怎么使用委托和事件 C# delegate与event编程方法
如何通过网站建站时间优化SEO与用户体验?
深入理解Android中的xmlns:tools属性
个人摄影网站制作流程,摄影爱好者都去什么网站?
*请认真填写需求信息,我们会在24小时内与您取得联系。