全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

浅谈Python生成器generator之next和send的运行流程(详解)

对于普通的生成器,第一个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小时内与您取得联系。