对于普通的生成器,第一个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的使用
# 给大家
# 列子
# 的是
# 是一个
# 第一个
# 一句
# 是从
# 我们可以
# 希望能
# 请使用
# 下一
# 第二个
# 再来
# 非常重要
# 另外一个
# 这篇
# 在一
# 一直没有
# 浅谈
# 则会
相关文章:
在线流程图制作网站手机版,谁能推荐几个好的CG原画资源网站么?
云南网站制作公司有哪些,云南最好的招聘网站是哪个?
昆明网站制作哪家好,昆明公租房申请网上登录入口?
C++时间戳转换成日期时间的步骤和示例代码
b2c电商网站制作流程,b2c水平综合的电商平台?
制作网站软件推荐手机版,如何制作属于自己的手机网站app应用?
如何挑选优质建站一级代理提升网站排名?
如何在服务器上三步完成建站并提升流量?
安云自助建站系统如何快速提升SEO排名?
网站网页制作电话怎么打,怎样安装和使用钉钉软件免费打电话?
品牌网站制作公司有哪些,买正品品牌一般去哪个网站买?
如何零成本快速生成个人自助网站?
如何快速生成高效建站系统源代码?
建站之星备案流程有哪些注意事项?
建站之星后台密码遗忘?如何快速找回?
c++怎么编写动态链接库dll_c++ __declspec(dllexport)导出与调用【方法】
如何快速上传自定义模板至建站之星?
建站之星代理如何获取技术支持?
大型企业网站制作流程,做网站需要注册公司吗?
网站制作软件有哪些,制图软件有哪些?
浙江网站制作公司有哪些,浙江栢塑信息技术有限公司定制网站做的怎么样?
实惠建站价格推荐:2025年高性价比自助建站套餐解析
高性价比服务器租赁——企业级配置与24小时运维服务
如何高效完成自助建站业务培训?
娃派WAP自助建站:免费模板+移动优化,快速打造专业网站
如何正确下载安装西数主机建站助手?
网站制作和推广的区别,想自己建立一个网站做推广,有什么快捷方法马上做好一个网站?
专业网站建设制作报价,网页设计制作要考什么证?
为什么Go需要go mod文件_Go go mod文件作用说明
建站之星ASP如何实现CMS高效搭建与安全管理?
宝塔建站后网页无法访问如何解决?
,交易猫的商品怎么发布到网站上去?
如何选择美橙互联多站合一建站方案?
新网站制作渠道有哪些,跪求一个无线渠道比较强的小说网站,我要发表小说?
详解免费开源的.NET多类型文件解压缩组件SharpZipLib(.NET组件介绍之七)
代刷网站制作软件,别人代刷火车票靠谱吗?
较简单的网站制作软件有哪些,手机版网页制作用什么软件?
建站主机CVM配置优化、SEO策略与性能提升指南
制作网站的网址是什么,请问后缀为.com和.com.cn还有.cn的这三种网站是分别是什么类型的网站?
如何在搬瓦工VPS快速搭建网站?
如何制作网站标识牌,动态网站如何制作(教程)?
整蛊网站制作软件,手机不停的收到各种网站的验证码短信,是手机病毒还是人为恶搞?有这种手机病毒吗?
如何选择高性价比服务器搭建个人网站?
南京做网站制作公司,南京哈发网络有限公司,公司怎么样,做网页美工DIV+CSS待遇怎么样?
高防服务器租用首荐平台,企业级优惠套餐快速部署
已有域名如何快速搭建专属网站?
江苏网站制作公司有哪些,江苏书法考级官方网站?
如何在VPS电脑上快速搭建网站?
建站之星如何一键生成手机站?
广州建站公司哪家好?十大优质服务商推荐
*请认真填写需求信息,我们会在24小时内与您取得联系。