Python生成器传参数及返回值原理解析


Posted in Python onJuly 22, 2020

一.生成器简介

在python中,带yield的方法不再是普通方法,而是生成器,它的执行顺序不同与普通方法.

普通方法的执行是从头到尾,最后return返回,或者没有返回值

生成器是到yield就返回yield之后的值,然后阻塞,等待next()/send()继续调起生成器

二.next()/send()的异同:

next()/send()都可以调起生成器

next()只能调起生成器返回值,send()还可以对生成器进行传参数,与正常的理解不同,yield表达式左侧的值是send()方法传进来的参数

还有一个有意思的点,第一次send()的时候要求只能send(None)

三.生成器的执行顺序

在yield这一行代码的执行逻辑是这样的,等号右边的yield r先执行,将r返回,阻塞...

等到下次生成器再被调起的时候,yield把传入的参数给n,再继续执行下面的代码,知道yield继续返回...

def consumer(): 
  r = '' 
  while True: 
    n = yield r 
    if not n: 
      return 
    print('[CONSUMER] Consuming %s...' % n) 
    r = '200 OK' 
 
def produce(c): 
  c.send(None) 
  n = 0 
  while n < 5: 
    n = n + 1 
    print('[PRODUCER] Producing %s...' % n) 
    r = c.send(n) 
    print('[PRODUCER] Consumer return: %s' % r) 
  c.close() 
                                                            

In [31]: c=consumer()                                                      

In [32]: c.send(None)                                                      
Out[32]: ''

In [33]: c.send(1)                                                       
[CONSUMER] Consuming 1...
Out[33]: '200 OK'

In [34]: c.send(2)                                                       
[CONSUMER] Consuming 2...
Out[34]: '200 OK'

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python中对list去重的多种方法
Sep 18 Python
Python中列表的一些基本操作知识汇总
May 20 Python
初步剖析C语言编程中的结构体
Jan 16 Python
Python做文本按行去重的实现方法
Oct 19 Python
python matplotlib画图实例代码分享
Dec 27 Python
解决python 输出是省略号的问题
Apr 19 Python
Python3使用pandas模块读写excel操作示例
Jul 03 Python
在python 不同时区之间的差值与转换方法
Jan 14 Python
python实现简单的tcp 文件下载
Sep 16 Python
利用python绘制中国地图(含省界、河流等)
Sep 21 Python
Python特殊属性property原理及使用方法解析
Oct 09 Python
如何基于matlab相机标定导出xml文件
Nov 02 Python
Python通过zookeeper实现分布式服务代码解析
Jul 22 #Python
Selenium python时间控件输入问题解决方案
Jul 22 #Python
Python基于字典实现switch case函数调用
Jul 22 #Python
Jmeter HTTPS接口测试证书导入过程图解
Jul 22 #Python
使用python批量修改XML文件中图像的depth值
Jul 22 #Python
Python持续监听文件变化代码实例
Jul 22 #Python
Python不支持 i ++ 语法的原因解析
Jul 22 #Python
You might like
在项目中寻找代码的坏命名
2012/07/14 PHP
php echo, print, print_r, sprintf, var_dump, var_expor的使用区别
2013/06/20 PHP
Symfony2针对输入时间进行查询的方法分析
2017/06/28 PHP
thinkphp5使html5实现动态跳转的例子
2019/10/16 PHP
动态修改DOM 里面的 id 属性的弊端分析
2008/09/03 Javascript
js常用排序实现代码
2010/12/28 Javascript
javascript模拟post提交隐藏地址栏的参数
2014/09/03 Javascript
理解Javascript图片预加载
2016/02/23 Javascript
javascript HTML5 Canvas实现圆盘抽奖功能
2016/04/11 Javascript
微信小程序 rpx 尺寸单位详细介绍
2016/10/13 Javascript
js实现刷新页面后回到记录时滚动条的位置【两种方案可选】
2016/12/12 Javascript
Vue响应式添加、修改数组和对象的值
2017/03/20 Javascript
Vue实现表格批量审核功能实例代码
2019/05/28 Javascript
ES6 Object.assign()的用法及其使用
2020/01/18 Javascript
TypeScript 引用资源文件后提示找不到的异常处理技巧
2020/07/15 Javascript
JavaScript函数柯里化实现原理及过程
2020/12/02 Javascript
[02:28]DOTA2英雄基础教程 狼人
2013/12/23 DOTA
pytorch使用Variable实现线性回归
2019/05/21 Python
使用pytorch实现可视化中间层的结果
2019/12/30 Python
python实现字符串和数字拼接
2020/03/02 Python
解决使用python print打印函数返回值多一个None的问题
2020/04/09 Python
Python Flask框架实现简单加法工具过程解析
2020/06/03 Python
Windows下Sqlmap环境安装教程详解
2020/08/04 Python
python基于selenium爬取斗鱼弹幕
2021/02/20 Python
英国女性时尚精品店:THE DRESSING ROOM
2018/05/23 全球购物
Farnell德国:电子元器件供应商
2018/07/10 全球购物
丽笙酒店官方网站:Radisson Hotels
2019/05/07 全球购物
系统管理员的职责包括那些?管理的对象是什么?
2016/09/20 面试题
工程预算与管理应届生求职信
2013/10/06 职场文书
大学生求职简历的自我评价
2013/10/14 职场文书
金融专业应届生求职信
2013/11/02 职场文书
少先队学雷锋活动总结范文
2014/03/09 职场文书
《会走路的树》教后反思
2014/04/19 职场文书
精彩的演讲稿开头
2014/05/08 职场文书
党的群众路线教育实践活动心得体会(教师)
2014/10/31 职场文书
漫画「古见同学有交流障碍症」第25卷封面公开
2022/03/21 日漫