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

  • 管理费用中的税金包括哪些
  • 金税盘交钱
  • 所得税的利润总额怎么计算
  • 小规模增值税做那个费用科目
  • 劳务费代扣代缴后还需要开发票吗
  • 出口产品报关单上保险费与实际不符可以丿退税吗
  • 公司取现备用金违法吗
  • 百度推广服务费一年多少钱
  • 什么费用计入什么科目
  • 如何计算纳税调整增加额
  • 开票金额小于付款金额,怎么办理
  • 忘了结转成本怎么办
  • 产品研发费用属于固定成本吗
  • 跨地区经营建筑企业预缴增值税
  • 利息收入会计如何做账
  • 已核销的应收账款
  • 个人所得税汇算清缴包括哪些项目
  • win7防火墙设置不了
  • 下花园6路公交车时间表
  • php货币换算人民币
  • 为什么建筑企业简易计税可以扣分包款
  • 债务担保是什么意思
  • 公积金的扣款怎么取消
  • 什么企业需要预缴所得税
  • php throw
  • 以权益结算的股票
  • php中实现文件上传需要用到哪几个函数
  • php单例模式什么时候用
  • 多模态教学模式论文
  • vue自定义指令生命周期
  • php如何做app
  • 应交税金应交增值税科目设置
  • 自然人所属税务机关怎么选
  • 个人独资公司和合伙公司有什么区别
  • mongodb数据库的作用
  • python 动态
  • 破产的产业要退回资金吗?
  • 一般纳税人提供财政部和国家税务总局规定的
  • 累计摊销属于什么类科目
  • 事业单位其他支出科目
  • 营改增后房租发票可以抵扣吗
  • 私募基金公司收入高吗
  • 一般存款账户可以办理现金缴存但不得办理现金支取
  • 公司贷款直接打收据吗
  • 怎么理解核销
  • 企业凭证处理流程图
  • 交易性金融资产的账务处理
  • 选择简易计税方法
  • 饭店卖烟酒需要什么手续
  • 利润为负还要交增值税吗
  • 货币资金核算制度是什么
  • sql查询字段被包含的内容
  • mysql 高效分页
  • wind如何安装
  • linux 使用技巧
  • 高端电脑品牌
  • ubuntu20.04挂载
  • linux系统的介绍
  • winxp显示设置
  • win8怎么更改密码
  • win builds
  • win8玩游戏
  • python函数详解
  • webpack基本使用
  • 还原分区和引导分区
  • unity集训
  • 如何给图像应用css滤镜处理效果
  • jquery 插件写法
  • unity3d如何导入图片
  • shell 数组操作
  • javascript函数调用函数
  • Python简单格式化时间的方法【strftime函数】
  • python遍历文件
  • jquery实现图片放大
  • 甘肃国家税务局兰州专用章图片
  • 住房货币化什么意思
  • 四川地方税务局网址是什么
  • 四川成都离剑门多远
  • 政府给予补贴
  • 宁波购房契税退税条件
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设