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实现web方式logview的方法
Aug 10 Python
python微信跳一跳系列之色块轮廓定位棋盘
Feb 26 Python
Python cookbook(数据结构与算法)实现对不原生支持比较操作的对象排序算法示例
Mar 15 Python
使用python进行文本预处理和提取特征的实例
Jun 05 Python
详解python实现识别手写MNIST数字集的程序
Aug 03 Python
python中协程实现TCP连接的实例分析
Oct 14 Python
python可视化实现代码
Jan 15 Python
Python with语句和过程抽取思想
Dec 23 Python
使用Keras预训练好的模型进行目标类别预测详解
Jun 27 Python
Python语言编写智力问答小游戏功能
Oct 13 Python
python mongo 向数据中的数组类型新增数据操作
Dec 05 Python
python 实现Harris角点检测算法
Dec 11 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
DC最新动画电影:《战争之子》为何内容偏激,毁了一个不错的漫画
2020/04/09 欧美动漫
谈谈PHP的输入输出流
2007/02/14 PHP
PHP采用get获取url汉字出现乱码的解决方法
2014/11/13 PHP
Laravel如何友好的修改.env配置文件详解
2017/06/07 PHP
PHP实现分布式memcache设置web集群session同步的方法
2018/04/10 PHP
ThinkPHP5.0框架使用build 自动生成模块操作示例
2019/04/11 PHP
浅说js变量
2011/05/25 Javascript
Jquery阻止事件冒泡 event.stopPropagation
2011/12/11 Javascript
详述JavaScript实现继承的几种方式(推荐)
2016/03/22 Javascript
javascript jquery对form元素的常见操作详解
2016/06/12 Javascript
JS动态的把左边列表添加到右边的实现代码(可上下移动)
2016/11/17 Javascript
angularJS 发起$http.post和$http.get请求的实现方法
2017/05/18 Javascript
webpack 4.0.0-beta.0版本新特性介绍
2018/02/10 Javascript
Angular如何在应用初始化时运行代码详解
2018/06/11 Javascript
如何阻止小程序遮罩层下方图层滚动
2019/09/05 Javascript
angular组件间通讯的实现方法示例
2020/05/07 Javascript
[01:30:54]《加油DOTA》 第三期
2014/08/18 DOTA
基于python中staticmethod和classmethod的区别(详解)
2017/10/24 Python
python机器学习之KNN分类算法
2018/08/29 Python
Python图像处理库PIL的ImageGrab模块介绍详解
2020/02/26 Python
django的模型类管理器——数据库操作的封装详解
2020/04/01 Python
利用html5的websocket实现websocket聊天室
2013/12/12 HTML / CSS
Watch Station官方网站:世界一流的手表和智能手表
2020/01/05 全球购物
英文版餐饮业求职信
2013/10/18 职场文书
秋季运动会稿件
2014/01/30 职场文书
七年级历史教学反思
2014/02/05 职场文书
《长征》教学反思
2014/04/27 职场文书
巾帼文明岗申报材料
2014/05/01 职场文书
护理专业毕业生自荐信
2014/06/15 职场文书
法院授权委托书格式
2014/09/28 职场文书
三八妇女节寄语
2015/02/27 职场文书
综合测评自我评价
2015/03/06 职场文书
回复函范文
2015/07/14 职场文书
《水上飞机》教学反思
2016/02/20 职场文书
工作报告范文
2019/06/20 职场文书
mysql中varchar类型的日期进行比较、排序等操作的实现
2021/11/17 MySQL