位置: 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去除底部)

  • 资产处置损益影响所有者权益总额吗
  • 交易性金融资产有哪些
  • 滴滴上开的发票是增值税发票还是普通发票
  • 一个季度是多长时间
  • 房地产企业开发成本科目明细
  • 发票退回原因
  • 房屋维修基金怎么入帐
  • 员工预借差旅费属于什么科目
  • 主营业务成本的贷方可以是哪些科目
  • 保安服务费差额征税如何计算税额
  • 专用发票与普通发票代码区别
  • 税率16降到13什么时候实施
  • 接受捐赠固定资产存货等有相关凭据的其成本按什么确定
  • 无形资产研发支出适用于税前加计扣除的政策
  • 土地使用权对外出租还摊销吗
  • 费用报销交通费
  • 单位应当为职工创造有益于健康的环境和条件
  • bios设置定时重启
  • 苹果13promax哪个颜色最贵
  • 微信收款会计分录,然后提现有手续费
  • 电子发票如何作废冲红
  • 全员劳动生产率怎么计算出来的
  • h5实现扫码功能
  • php date_diff
  • php字符串函数大全
  • php getheader
  • 企业缴纳职工社保是否可以缴纳三险
  • 离职补偿金的会计实务处理
  • 补交上年度增值税附加税,怎么做账
  • 伦索伊斯马拉赫塞斯国家公园
  • thinkphp3.1
  • 计提坏账损失的范围
  • 营改增增值税会计处理
  • 土地测绘费用会计科目
  • 出口退税的账怎么做
  • thinkphp生成html
  • 浅谈一下新冠的好处
  • php分类
  • 卫生医疗收费专业有哪些
  • 货运代理约柜费怎么算
  • 律师事务所执业证
  • mysql5.6.24
  • 电子税务局网开电子发票
  • 企业的其他应付款
  • 最新外资企业法实施条例
  • 出口免税申报流程视频
  • sql server 2016 always on
  • 应付职工薪酬借方表示什么
  • 房产税如何申请减免
  • 销售返现如何做账务处理
  • 收到公众号消息提醒
  • 进账单,其中有两个账户
  • 开具增值税专用发票含税吗
  • 劳务派遣证验资
  • 贸易公司的经营模式
  • 销售毛利率怎么算
  • mysql基本表
  • .NET Framework SQL Server 数据提供程序连接池
  • win7系统打开软件就停止工作
  • xp怎么删除多余的操作系统
  • mac备忘录怎么使用
  • win7资源管理器频繁崩溃
  • windows 查看图片
  • win10怎么设置加快电脑速度
  • w10英雄联盟老是崩溃
  • windows10新功能
  • win10 20h2 04累积更新
  • linux在实际工作中的应用
  • kindeditor获取内容
  • js数组洗牌
  • python怎么获取命令行参数
  • 详解金球奖之争
  • android中适配器
  • js如何使用
  • android零基础入门教程
  • gridlayout用法
  • 非税收入纳入一般公共预算管理
  • 委托代销清单怎么写
  • 南宁立遗嘱的地方
  • 什么是金融企业的固定推销人员
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设