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

  • 企业税收主要分为哪几类
  • 合理避税与偷税漏税的行为区别
  • 发票冲红重开,重开时是按新税率还是旧税率
  • 一般纳税人外地预交税款怎么预缴
  • 原材料入库进项税
  • 公司年末报表
  • 印花税已经申报在哪里点交费
  • 印花税自查补缴要先申报吗
  • 已经抵扣过的进项票对方红冲之后怎么做账报税
  • 个税返还手续费奖励员工需要交个税吗
  • 个体工商户销售自己使用过的物品
  • 化验室购买仪器计入什么科目
  • 不动产分割的法律规定
  • 员工工资可以计入在建工程吗
  • 计提资产减值准备是利好还是利空?
  • 没有发票怎么报销入账
  • 一般纳税人能否享受残保金优惠
  • 应税行为扣除额期初余额
  • 开了发票必须记收入吗
  • 个人所得税申报退税的条件
  • 补发工资申请书格式范本
  • 个体户小规模纳税人每月开票
  • 小型微利企业应纳税所得额300万
  • 高新技术企业资格复核
  • 受托加工物资的账务处理例题
  • 蛋糕店盈亏平衡分析
  • 公司注销往来账的账务处理
  • win7怎么获取管理员
  • 兼职劳务费税率是多少
  • php字符串操作函数
  • 住房公积金会扣税吗
  • 非合理损耗会计分录
  • 财政应返还额度是什么意思?
  • gain_trickler_3202.exe 进程查询 gain_trickler_3202进程是什么文件
  • php 重写 重载
  • 新制度下财政拨款是什么
  • 企业以非货币性资产投资
  • 配置eAccelerator和XCache扩展来加速PHP程序的执行
  • thinkphp5执行流程
  • php imagefill
  • PHP+JQuery+Ajax实现分页方法详解
  • xclip命令怎么用
  • 应收账款等于什么加什么
  • javascrapt
  • discuz论坛账号
  • 史上伟大电影
  • 增值税普通发票税率
  • 收入的确认规则
  • 企业的管理费用占比
  • mongodb cond
  • 独立核算的分公司注销时账面怎么处理
  • 科技型中小企业享受优惠税收政策
  • mysql binlog dump
  • 金税四期对企业的好处
  • 苗木免税吗
  • 发票冲红给对方单位说明怎么写
  • 预提费用在新会计准则下该如何列支?
  • 最全的sql执行顺序
  • ubuntu crontab
  • 系统之家一键重装系统教程
  • ubuntu如何安装wps
  • linux ssh安装包
  • win7不允许我更改系统设置
  • win8 ui
  • 用什么命令最简单
  • JavaScript的instanceof运算符学习教程
  • jQuery中的ajax async同步和异步详解
  • 进程 python
  • cocos2d怎么用
  • opengl使用教程
  • js确认框s弹出框确定和取消
  • jquery validator
  • 编写折半查找的程序
  • linux perl -e
  • js实现框选
  • asyncio 的 coroutine对象 与 Future对象使用指南
  • 个体户注销税盘需要公章吗
  • 预缴纳税申报个税怎么算
  • 河北省电子税务局官网app
  • 关于个体户的个人所得税的最新政策法规
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设