位置: IT常识 - 正文

python生成器中的send()方法和next()方法(python中生成器的作用)

发布时间:2024-01-22

推荐整理分享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去除底部)

  • freebuds4怎么连接第二个设备(freebuds4怎么连接蓝牙)

    freebuds4怎么连接第二个设备(freebuds4怎么连接蓝牙)

  • 华为p40自带微信视频带美颜吗(华为p40自带微信美颜吗)

    华为p40自带微信视频带美颜吗(华为p40自带微信美颜吗)

  • iphonexsmax发热就卡(iphonexsmax突然发烫)

    iphonexsmax发热就卡(iphonexsmax突然发烫)

  • 华为什么型号有红外线功能吗(华为什么型号有5g)

    华为什么型号有红外线功能吗(华为什么型号有5g)

  • 闲鱼收到货与描述不符(闲鱼收到货与描述不符运费谁出)

    闲鱼收到货与描述不符(闲鱼收到货与描述不符运费谁出)

  • 打印机打印出来的纸有一条黑道怎么解决(打印机打印出来的纸黑乎乎的)

    打印机打印出来的纸有一条黑道怎么解决(打印机打印出来的纸黑乎乎的)

  • 苹果手机刷机是什么意思呢(苹果手机刷机是还原所有设置还是抹掉所有内容)

    苹果手机刷机是什么意思呢(苹果手机刷机是还原所有设置还是抹掉所有内容)

  • 网络已停用是什么意思(手机数据网络不可用是什么原因)

    网络已停用是什么意思(手机数据网络不可用是什么原因)

  • 苹果ipad有哪些型号(苹果ipad有哪些系列)

    苹果ipad有哪些型号(苹果ipad有哪些系列)

  • 为什么笔记本电脑亮度已经最亮但还是太暗(为什么笔记本电脑找不到无线网络)

    为什么笔记本电脑亮度已经最亮但还是太暗(为什么笔记本电脑找不到无线网络)

  • eps文件怎么打开(如何分割pdf文件)

    eps文件怎么打开(如何分割pdf文件)

  • ps图层解锁快捷键(photoshop图层解锁快捷键)

    ps图层解锁快捷键(photoshop图层解锁快捷键)

  • 手机卡顿怎么解决(手机卡顿怎么解决华为)

    手机卡顿怎么解决(手机卡顿怎么解决华为)

  • 怎么收藏快手里的视频(怎么收藏快手里的作品)

    怎么收藏快手里的视频(怎么收藏快手里的作品)

  • 手机怎么相互定位(手机怎样相互定位手机)

    手机怎么相互定位(手机怎样相互定位手机)

  • 饿了吗骑手年龄限制(饿了吗骑手年龄最大多少)

    饿了吗骑手年龄限制(饿了吗骑手年龄最大多少)

  • iphone11可以分屏吗(iphone 11能否分屏)

    iphone11可以分屏吗(iphone 11能否分屏)

  • mate20能不能无线充电(华为mate20能无线充电么)

    mate20能不能无线充电(华为mate20能无线充电么)

  • 图片和原图有什么区别(图片的原图是什么意思)

    图片和原图有什么区别(图片的原图是什么意思)

  • 花呗黄金会员有什么用(支付宝花呗黄金会员什么意思)

    花呗黄金会员有什么用(支付宝花呗黄金会员什么意思)

  • 淘宝被限制登录什么意思(淘宝被限制登录了怎么解除支付宝绑定)

    淘宝被限制登录什么意思(淘宝被限制登录了怎么解除支付宝绑定)

  • 华为手机怎么没有高级设置(华为手机怎么没有通用设置)

    华为手机怎么没有高级设置(华为手机怎么没有通用设置)

  • 抖音小店购买记录怎么删除(抖音小店购买记录怎么查)

    抖音小店购买记录怎么删除(抖音小店购买记录怎么查)

  • 海南增值税发票图片
  • 未办理税务登记的个体户怎么注销营业执照
  • 2023年增值税税率表
  • 员工可以签订两份劳动合同吗
  • 财务专用章的重要性
  • 去税务局申报需要带营业执照吗
  • 公司可以为非本人开户吗
  • 销售退款怎么做分录
  • 促销费可以开专票吗
  • 网络公司可以开展什么业务
  • 企业认购普通股100万股作为交易性金融资产管理
  • 利息算增值税吗
  • 园林绿化公司要交税吗
  • 增值税普通发票税率
  • 文化传媒行业会计
  • 职工福利费为什么是14%
  • 担保贷款造成的损失可以税前扣除吗?
  • 美元兑人民币分时走势图
  • linux命令-a
  • Excel规划求解怎么做
  • 车辆的代驾费应该怎么收
  • linux aptx
  • 固定资产的财务处理方法
  • 预测“叫停GPT-4后续AI大模型”后续:这是一个囚徒困境
  • php如何解决异常处理
  • laravel自动生成接口文档
  • 苹果11 关机方法
  • php连接mysql数据库详细步骤(图文)
  • 苹果官网入口
  • php字符串赋值
  • win10如何给文件夹上锁
  • 小规模纳税人需要缴纳个人所得税吗
  • 简述项目融资风险的内容
  • 增值税发票开红字发票后账务处理?
  • 企业收回应收账款会计分录
  • 庞塞 德莱昂
  • nginx部署前后端项目
  • 库存现金每月终了由谁清点
  • php添加背景怎么实现
  • 交易性金融资产是什么意思
  • 工程物资的税率怎么算
  • 凭证过账后发现了错误,如何处理
  • 爬虫工程师简介
  • 废品销售是否缴纳增值税
  • sqlserver 进程死锁
  • 暂估入库账务处理举例
  • 增值税期末有留抵税额应该怎么结转
  • 公司收到拆迁补偿金,于评估公司的区别
  • 转移固定资产是指什么
  • 装修公司预收款要交增值税吗
  • 在建工程中发生的费用
  • 股东投资方式有哪些
  • 员工拿发票报销怎么做账
  • 外资企业对应的企业是什么
  • 劳务费差额征税的账务处理
  • sql数据库压缩能提高性能吗
  • 如何进行节约
  • 如何查看ubuntu系统的版本
  • 电脑主板bios设置图解
  • 如何关闭windows防火墙
  • 提高生殖能力
  • win8设置在哪
  • linux git管理工具
  • quick cocos UIListView之isItemInViewRect方法修正
  • android基础入门教程
  • 应用web标准实例是什么
  • javascript基础编程
  • Linux进程通信(IPC)方式简介
  • rgb颜色相加
  • python变量字符串等函数
  • My Magic Android Tour —— 处女作
  • linux tomcat命令
  • 批处理set命令
  • 批处理命令读取文件内容
  • javascript entries
  • pythonlist删除指定位置元素
  • js操作对象的方法
  • 水利基金税率‰6什么时候调整
  • 税务经侦科立案标准
  • 什么叫售后回租赁合同
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号