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

  • 联想拯救者怎么恢复出厂系统(联想拯救者怎么开启独显直连)

    联想拯救者怎么恢复出厂系统(联想拯救者怎么开启独显直连)

  • 苹果13promax怎么一键锁屏(苹果13promax怎么关机)

    苹果13promax怎么一键锁屏(苹果13promax怎么关机)

  • 华为nova6使用耳机的方法(华为nova6自带的耳机)

    华为nova6使用耳机的方法(华为nova6自带的耳机)

  • 什么可以用来度量一种算法的计算效率(可以用什么啊)

    什么可以用来度量一种算法的计算效率(可以用什么啊)

  • ipad mini5支持pd快充吗(ipad mini5 pd快充支持几w)

    ipad mini5支持pd快充吗(ipad mini5 pd快充支持几w)

  • 快手私信一天最多多少(快手私信一天最多多少字)

    快手私信一天最多多少(快手私信一天最多多少字)

  • qq情侣空间别人能看见吗(qq情侣空间别人为什么看不到)

    qq情侣空间别人能看见吗(qq情侣空间别人为什么看不到)

  • 小米手机被屏蔽的短信去哪看(小米手机被屏蔽的短信怎么恢复)

    小米手机被屏蔽的短信去哪看(小米手机被屏蔽的短信怎么恢复)

  • vivox27卡槽怎么有两个孔(vivox27卡槽怎么打开视频)

    vivox27卡槽怎么有两个孔(vivox27卡槽怎么打开视频)

  • 双重认证有什么坏处(双重认证有什么用)

    双重认证有什么坏处(双重认证有什么用)

  • oppo三个键怎么设置(oppo三个键怎么设置导航键)

    oppo三个键怎么设置(oppo三个键怎么设置导航键)

  • win10家庭单语言版和家庭版区别(win10家庭单语言版好处)

    win10家庭单语言版和家庭版区别(win10家庭单语言版好处)

  • 支付宝账单详情在哪里(支付宝账单详情生成器)

    支付宝账单详情在哪里(支付宝账单详情生成器)

  • 快手评论抢置顶什么意思(快手评论抢置顶网站)

    快手评论抢置顶什么意思(快手评论抢置顶网站)

  • 荣耀20怎么设置连拍(荣耀20怎么设置三个按键)

    荣耀20怎么设置连拍(荣耀20怎么设置三个按键)

  • 链信如何取消实名认证(链信怎么解除身份证实名认证)

    链信如何取消实名认证(链信怎么解除身份证实名认证)

  • 华为故事锁屏怎么卸载(华为故事锁屏怎么关)

    华为故事锁屏怎么卸载(华为故事锁屏怎么关)

  • vivox24pro防水吗(vivox27pro防水么)

    vivox24pro防水吗(vivox27pro防水么)

  • 元气骑士怎么改键位(元气骑士怎么改宠物皮肤)

    元气骑士怎么改键位(元气骑士怎么改宠物皮肤)

  • 苹果xr快充伤电池吗(xr用快充对电池耗电变快了)

    苹果xr快充伤电池吗(xr用快充对电池耗电变快了)

  • 华为手机像素不好怎么调整(华为手机像素不好是为什么)

    华为手机像素不好怎么调整(华为手机像素不好是为什么)

  • 序号怎么拉下来12345(计算机序号怎么拉下来)

    序号怎么拉下来12345(计算机序号怎么拉下来)

  • csrss.exe是什么进程?有没有病毒?(csrss是什么程序)

    csrss.exe是什么进程?有没有病毒?(csrss是什么程序)

  • 【前端修炼场】 — 这些标签你学会了么?快速拿下 “hr”(web前端修炼之道)

    【前端修炼场】 — 这些标签你学会了么?快速拿下 “hr”(web前端修炼之道)

  • iotop命令  监视磁盘I/O状态

    iotop命令 监视磁盘I/O状态

  • 当年亏损额为什么不能填?
  • 购进货物没有发票接受虚开判刑案例
  • 广告公司如何申报文化事业建设税
  • 房地产简易计税税率
  • 库存商品进项税额转出分录怎么写
  • 股东捐赠给企业资金保壳
  • 消费税征收环节下划的影响
  • 企业所得税季度申报
  • 固定资产机械设备
  • 自营方式建造固定资产增值税
  • 外贸出口企业城市排名
  • 企业境外收入税率
  • 建筑企业差额征收
  • 税务局退税收入多久到账
  • 纳税人跨县(市、区)是指
  • 广告制作费怎么入账
  • 初级备考计划表
  • 使用时间长但金币不见了
  • 资产负债率是用年初和年末数吗
  • 主营业务利润计算
  • 股权转让相关手续
  • 找不到powershell.exe文件
  • 鸿蒙系统如何删除桌面图标
  • 负债率是什么指标
  • 营业外收入的账户结构
  • 维尔登的心结
  • linux系统中如何查看日志
  • 苹果官网
  • php与jquery
  • 双层for循环的程序流程图
  • phpsessid是什么
  • 营业外支出会计准则
  • 一般纳税人收到小规模专票怎么抵扣
  • 10分钟搞定3种网红小吃
  • add files to archive
  • 工业企业应付账款周转率多少合适
  • css spirit
  • 【Zabbix实战之部署篇】Zabbix客户端的安装部署方法
  • nodejs如何与前端交互
  • node.js快速入门
  • c语音进阶
  • java桥接模式的应用场景
  • 有没有网上学电脑的
  • python极客项目编程 豆瓣
  • discuz论坛账号
  • 每个月工资扣的税为什么不一样
  • 电脑自学网
  • mysql慢查询日志查看
  • 出租车票可以查到行程吗
  • 删除mysql57服务
  • mongodb的常用命令
  • 劳务报酬的增值税起征点
  • 医院能开增值发票吗
  • 哪些项目的进项不含税
  • 经营活动的现金流量占全部现金流量的比重越大
  • 个人咨询费发票怎么开
  • 帮客户支付的机票计入什么科目
  • 工程物资原材料在资产负债表哪个科目体现
  • 土地无形资产要摊销吗
  • 抵扣旅客运输服务申报时填哪行
  • 银行业务冲正
  • 预算凭证是什么
  • 行政事业单位会计风险来源于日常的会计活动
  • 可以抵扣进项税的项目包括
  • 开了20万销项进项为0交多少税
  • 金蝶当月没有账如何结转到下月
  • 新会计制度下五类是什么
  • Win10系统怎么进入控制面板
  • win7系统在哪里设置ip地址
  • win8改win7怎么改
  • windowsxp如何创建宽带连接
  • win7浏览器主页怎么设置
  • windows8使用技巧
  • windows vhd
  • linux 多块硬盘虚拟成一块
  • unity editor window
  • 在javascript中关于alert confirm
  • 税控盘忘记抄报罚多少
  • 宁波出租车购买
  • 上海社保联网
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设