位置: IT常识 - 正文

python生成器中的send()方法和next()方法(python中生成器的作用)

编辑:rootadmin

推荐整理分享python生成器中的send()方法和next()方法(python中生成器的作用),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:python生成器怎么用,python生成器详解,python生成器的应用场景,python3 生成器,python3 生成器,python生成器yield,python生成器有几种写法,python 生成,内容如对您有帮助,希望把文章链接给更多的朋友!

在异步IO的使用时,generator是最基本的一个实现方法。python生成器有两个主要方法,一个是send一个是next。今天我们来看看两者的用法和联系。在每段代码中,第一个next调用,相当于启动生成器,会从生成器函数的第一行代码开始执行,直到第一次执行完yield语句(第4行)后,跳出生成器函数。然后第二个next调用,进入生成器函数后,从yield语句的下一句语句(第5行)开始执行,然后重新运行到yield语句,执行后,跳出生成器函数后面再次调用next,依次类推。

python生成器中的send()方法和next()方法(python中生成器的作用)

这里我们用经典的生产者-消费者模型举个例子(摘自廖雪峰的博客)

defconsumer():r=0foriinxrange(3):yieldrr='200OK'+str(i)c=consumer()n1=c.next()n2=c.next()n3=c.next()

实际上next()和send()在一定意义上作用是相似的,区别是send()可以传递yield表达式的值进去,而next()不能传递特定的值,只能传递None进去。因此,我们可以看做c.next() 和 c.send(None) 作用是一样的。

第一次调用时,请使用next()语句或是send(None),不能使用send发送一个非None的值,否则会出错的,因为没有Python yield语句来接收这个值。

相关推荐:《Python视频教程》

下面说明下send执行的顺序。先记住,n1 = yield r这句话是从右往左执行的。当第一次send(None)(对应11行)时,启动生成器,从生成器函数的第一行代码开始执行,直到第一次执行完yield(对应第4行)后,跳出生成器函数。这个过程中,n1一直没有定义。

运行到send(1)时,进入生成器函数,此时,将yield r看做一个整体,赋值给它并且传回。此时即相当于把1赋值给n1,但是并不执行yield部分。下面继续从yield的下一语句继续执行,然后重新运行到yield语句,执行后,跳出生成器函数。即send和next相比,只是开始多了一次赋值的动作,其他运行流程是相同的。

defconsumer():r='here'whileTrue:n1=yieldr#这里的等式右边相当于一个整体,接受回传值ifnotn1:returnprint('[CONSUMER]Consuming%s...'%n1)r='%d00OK'%n1defproduce(c):aa=c.send(None)n=0whilen<5:n=n+1print('[PRODUCER]Producing%s...'%n)r1=c.send(n)print('[PRODUCER]Consumerreturn:%s'%r1)c.close()c=consumer()produce(c)

运行结果:

[PRODUCER]Producing1...[CONSUMER]Consuming1...[PRODUCER]Consumerreturn:100OK[PRODUCER]Producing2...[CONSUMER]Consuming2...[PRODUCER]Consumerreturn:200OK[PRODUCER]Producing3...[CONSUMER]Consuming3...[PRODUCER]Consumerreturn:300OK[PRODUCER]Producing4...[CONSUMER]Consuming4...[PRODUCER]Consumerreturn:400OK[PRODUCER]Producing5...[CONSUMER]Consuming5...[PRODUCER]Consumerreturn:500OK
本文链接地址:https://www.jiuchutong.com/zhishi/304094.html 转载请保留说明!

上一篇:day02-HTML02

下一篇:discuz如何删除forum.php(discuz去除底部)

  • 股票印花税如何计算
  • 青岛山公寓二手房出售
  • 在外地施工的企业应该在哪里申报
  • 啥叫总分类账
  • 工会经费支付福利方案
  • 税务结清后多少时间内工商需要注销
  • 集体不动产和动产包括
  • 建筑公司核定征收所得税怎么算
  • 分步法和分批法思维导图
  • 单位部分承担个人借款利息个税的计算
  • 公司转让注册资金怎么弄
  • 如果增值税发票丢了好的怎么办有谁交罚熬一
  • 长期待摊费用当月增加当月摊销吗
  • 取得特许权使用费收入增值税税率
  • 电子发票打印出来没有税务局的章
  • 增值税一般纳税人认定标准
  • 装修期间用电
  • 商品编码选错税务会直接罚款吗?
  • 反倾销税税率查询
  • 金税盘费用到期
  • 收到住房补贴怎么做账
  • 建筑工程公司需要注册商标吗
  • 销售旧房增值税销售额怎么算
  • win10ie浏览器没有internet选项
  • macbook右上角
  • win10电脑和win7电脑怎么共享文件
  • 苹果手机id被锁定什么意思
  • php调用图片
  • 净资产收益率怎么求
  • 系统win7旗舰版
  • framework教程
  • vite配置详解
  • 日出的时候是圣诞节
  • 临时存款账户销户
  • 融资租入固定资产是什么意思
  • 土地使用权转让法律规定
  • 机器学习中的数学原理——对数似然函数
  • 奥杜邦的祈祷经典语录
  • 商场代收款发票图片
  • javascript原生
  • 研发支出资本化支出在资产负债表哪里体现
  • 营业执照上住所和经营场所
  • html作业做网页
  • 广东省工科赛智能配送
  • torch.cuda.is_available()
  • 假如你知道这样是什么歌
  • gpib-usb驱动
  • 多线程 cpp
  • 售后租回融资租赁帐务处理怎么做?
  • 土地利息可以作为土增扣除吗
  • 未使用的固定资产
  • PostgreSQL 角色与用户管理介绍
  • 分公司注销一般要多久
  • 发票上的货物要怎么填?
  • 合并报表抵消分录的基本原理
  • 汇算清缴补税的凭证后面需要附件吗
  • 汽车折旧年限与折旧率
  • 现金流量表是指现金还是银行存款
  • 销户还能申请抚养费吗?
  • 新成立公司季初资产总额是填1
  • 稳定用工社保补贴怎么领
  • 董事会会议的召集程序
  • 合并编制报表主要有哪几种
  • gridview自定义排序
  • Windows(x86,64bit)升级MySQL 5.7.17免安装版的详细教程
  • win8系统安装步骤
  • linux pptp客户端
  • solaris 修改用户 主目录
  • WINDOWS系统还原主要作用
  • mac launchctl
  • shell下同时读取多个文件的方法
  • win7 media center
  • 如何把win7系统复制到u盘里
  • 关闭linux命令
  • c# opengl 3d
  • nodejs连接达梦数据库
  • python num怎么用
  • javascript操作数组的方法
  • 上海市税务官方网站网址
  • 税务有哪些方面
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设