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

  • 减免增值税如何结转
  • 农产品进项税额转出怎么算
  • 房产税从价计征如何算
  • 报废车残值款计入什么科目
  • 交通费怎么抵扣进项税
  • 企业所得税大白话解释
  • 票据占比不得超过各项贷款的
  • 营改增后常用发票报销的种类有哪些呢?
  • 17点增值税发票能开吗
  • 个人名义帮公司贷款
  • 为什么收到的劳务费税点打星号?
  • 政府补助怎么开票入账
  • 购物发票的税是由谁承担
  • 金融服务手续费可以抵扣进项税吗
  • 折价股权转让账务处理
  • 企业电子印章申请流程海口
  • 免征文化事业建设费条件的销售额标准
  • 职工福利费进项税转出怎样做账务处理
  • 进口货物完税价格名词解释
  • 商业汇票收款到什么账户
  • 公对公转账不开票可以吗
  • printnow.exe - printnow是什么进程 有什么作用
  • 房地产企业纳税申报需要报哪些报表
  • php遍历显示多维数组
  • fdisk分区工具怎么用
  • 员工食堂餐费可以税前扣除吗
  • 电脑eb是什么意思
  • 购买电子承兑需要给对方开发票吗
  • anaconda更改虚拟环境路径
  • 微信小程序webview支付
  • CSS: overflow-anchor 固定滚动到底部,随着页面内容增多滚动条自己滚动展示最新的内容
  • 机票的退票费可以开具发票吗
  • htmlspecialchars_decode
  • yolov5 教程
  • uniapp获取手机通讯录
  • watch跟computed区别
  • element ui
  • 用cat命令创建f1和f2文件
  • 利息收入包括
  • phpcms api
  • 电信收款收据可以入账吗
  • 建筑企业异地预缴增值税销售额含税吗
  • 工会经费计提的比例
  • 房地产预缴增值税计税依据
  • mysql 触发器
  • 待抵扣进项税额什么意思
  • 营改增后的劳务费怎么开
  • 一个分组名称
  • 小规模纳税人免税政策2022
  • 道路货物运输服务税率
  • 经营费用是指
  • 企业开负数发票退货后如何处理?
  • 支付永续债利息的会计处理
  • 成本会计核算方法论文怎么写
  • mysql 5.7.11 winx64安装配置方法图文教程
  • sqlserver 获取字符位置
  • mysql字段什么意思
  • select into 和 insert into select 两种表复制语句
  • 如何快速恢复么
  • windows8启动项在哪里
  • windows局域网共享文件用的什么协议
  • win8电脑d盘不见了怎么恢复
  • linux目录结构创建
  • win8 开机
  • css样式的使用
  • javascript中interval与setTimeOut的区别示例介绍
  • css新闻页面制作
  • Node.js中的事件循环是什么样的
  • android新手入门
  • shell 字符串比较
  • pulls toward
  • javascript Window及document对象详细整理
  • js表单事件有哪些
  • jquery表格隔行变色代码
  • python语言基本语法
  • python+django
  • 电子发票查询官网入口
  • 无自然人登记信息是怎么回事
  • 山东省准生证是什么样子图片
  • 煤矸石征收资源税吗
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设