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

  • 新办营利性医疗机构是否免征土地使用税和房产税?
  • 改革性补贴是否属于规范的津贴补贴
  • 资产管理公司的使命
  • 减免增值税款怎么算
  • 借款利息收入要开票吗
  • 综合所得预扣预缴表在哪里查
  • 季度所得税从业人员怎么填
  • 成品油跨月发票红字冲销步骤
  • 存货的加工成本指的是加工过程中发生的追加费用
  • 租赁的房子
  • 库存商品记错了怎样写分录
  • 外地办事处能交当地社保吗
  • 付现金给别的公司是否可以开具发票呢?
  • 子公司给母公司开票
  • 以前年度损益调整结转到哪里
  • 个人抬头发票能开专票吗
  • 个人汽车租赁发票网上怎么开
  • 偷税罪立案标准最新
  • 建筑施工的会计科目
  • 支付董事会成员津贴计入什么科目
  • 新会计准则开办费的账务处理
  • 公司法人借款给公司怎么取出来
  • 先亏后盈法案例分析
  • acer笔记本电脑怎么恢复出厂设置
  • win11如何关闭开机自启动项
  • mac系统 硬盘
  • 初级会计实务的心得体会
  • 修改php.ini
  • 其他生活服务业增值税税率
  • 电脑任务栏在右边怎么调回下边
  • php目录结构
  • 直线法计提折旧每年都一样吗
  • element栅格布局
  • 报销生育险怎么报
  • 增值税发票超额后税率
  • uniapp怎么做适配
  • 工会费会计分录
  • Symfony2实现在doctrine中内置数据的方法
  • php发送qq邮箱
  • nerf 怎么瞄准
  • 增值税逾期未申报怎么补申报
  • php对接mysql
  • 驾校属于什么行业分类类别
  • 火爆全网的头像男
  • 【机器学习】前置知识:矩阵的表示与定义 | Identity 身份矩阵 | 逆矩阵和转置 | 标量乘法
  • 发票写的是信息怎么办
  • 境外公司委托境内公司付款
  • 网上学电脑
  • 纳税人识别号和公司税号一样吗
  • sql2008附加数据库错误3456
  • 围挡属于市政还是建筑
  • 暂时性差异和永久性差异怎么区分
  • 车辆保险费如何缴纳印花税的
  • 收到以前年度退款怎么做分录
  • 房屋出租收入计入
  • 研究费用记入什么费用
  • 外币支付账户
  • 公司前期装修费属于开办费吗
  • 公司广告制作费用申请报告
  • 购买汽车的工本费如何入账
  • 现金投资属于什么会计科目
  • win10周年版
  • centos 安装
  • 苹果mac操作系统版本
  • 制作xp系统盘需要多大u盘
  • squid详细
  • dreamweaver是干嘛的
  • Win7系统如何清除流氓屏保
  • uiview和calayer关系
  • javascript 高级
  • android camera1
  • android下载文件保存到本地
  • android 5.1 WIFI图标上的感叹号及其解决办法
  • jquery使用方法
  • 增值税发票综合服务平台登录不了
  • 电子票怎么申领到开票系统
  • 新疆税务app操作手册
  • 个人所得税申报是什么意思
  • 安徽省地方税务局刘利庆
  • 沙石开发票
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设