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

  • 增值税开票软件在哪下载
  • 待办事项没有印章怎么办
  • 一般纳税人做账流程图
  • 残保金季报要填上年职工人数
  • 跨月的增值税专用发票未抵扣怎么作废
  • 用友t6会计科目在哪里找
  • 分支机构是否享受小微企业企业所得税优惠?
  • 销售农业产品的税率
  • 不动产进项税额分两年抵扣
  • 委托其他公司开票收款
  • 库存商品过期报废需要什么附件
  • 固定资产之前没提折旧,数额交大
  • 境外代扣代缴的税最后归谁所有
  • 股权转让收益算利润吗
  • 以前年度企业所得税申报表怎么查
  • 企业所得税上个季度赔钱下个季度挣钱
  • 营业外支出所得税汇算要调增吗
  • 小规模纳税人免征增值税怎么记账
  • 事业单位研发支出资本化
  • 商超联营扣点
  • 固定资产什么时候增加
  • 待报解地方预算收入怎么做账
  • 投资基金是什么科目
  • 计提外币借款利息
  • 可抵扣的金税盘维护费会计分录怎么做?
  • 电脑怎么进入bios中文
  • 坏账准备属于哪个会计科
  • 赔偿材料做什么分录
  • 股权折价转让
  • 本年利润和未分配利润怎么结转
  • PHP:pcntl_wstopsig()的用法_PCNTL函数
  • 执行企业会计制度的企业有哪些
  • c++好学
  • 小程序从入门到精通
  • 探索app下载
  • yolov3目标检测
  • php时间代码
  • 增值税及附加交给国税还是地税
  • python tkinter ttk
  • 如何在控制台打印debug里的数据
  • 外贸企业主要做什么
  • 长期挂账的应付款怎么处理
  • 售后回租融资租赁会计处理
  • 化验委托书
  • 汽车4s店收到保险佣金做账
  • 销售返利如何做会计分录
  • 交存超库存现金
  • 劳务收入是什么科目
  • 内部使用的收据可以做原始凭证吗
  • 应收账款转营业外支出
  • 折旧年限的最新规定2021
  • 企业新增的残疾税
  • 管理费用是负数怎么处理
  • 分公司可以设立公司吗
  • 会计循环属于什么流程
  • 酒店财务帐务处理方案
  • mysql 5.7.33安装
  • win7系统环境变量无法编辑怎么办
  • WIN10系统优化技巧
  • freebsd查看硬盘信息
  • 微软平板电脑surface pro2参数
  • solaris安装教程
  • win8升win8.1
  • xp系统怎么弄成win7
  • linux如何释放内存空间
  • pkg-config命令
  • win10教育版登录
  • 到了这个年纪吉他谱完整版
  • 如何获得select选中的值
  • cmd pushd
  • nodejs实现登录
  • js闭包的定义和用途
  • js操作属性的方法
  • typescript的缺点
  • 用javascript
  • jquery实现倒计时效果
  • andriod中SimpleAdapter+listview,点击item 传值事件
  • 郑州国税发票查询系统
  • 成都租房备案凭证怎么办理
  • 四川省成都市地图高清版大图
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设