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使用matplotlib实现在坐标系中画一个矩形的方法
May 20 Python
python实现简单ftp客户端的方法
Jun 28 Python
Python使用Beautiful Soup包编写爬虫时的一些关键点
Jan 20 Python
Python中Scrapy爬虫图片处理详解
Nov 29 Python
python如何派生内置不可变类型并修改实例化行为
Mar 21 Python
Python实现语音识别和语音合成功能
Sep 20 Python
如何更改 pandas dataframe 中两列的位置
Dec 27 Python
python opencv 图像边框(填充)添加及图像混合的实现方法(末尾实现类似幻灯片渐变的效果)
Mar 09 Python
python删除指定列或多列单个或多个内容实例
Jun 28 Python
python如何操作mysql
Aug 17 Python
Python实现单例模式的5种方法
Jun 15 Python
5行Python代码实现一键批量扣图
Jun 29 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
咖啡的化学
2021/03/03 咖啡文化
php 显示指定路径下的图片
2009/10/29 PHP
克隆一个新项目的快捷方式
2013/04/10 PHP
laravel自定义分页效果
2017/07/23 PHP
PHP二维数组实现去除重复项的方法【保留各个键值】
2017/12/21 PHP
javascript 动态修改样式和层叠样式表代码
2010/04/27 Javascript
js中的scroll和offset 使用比较的实例与分析
2013/09/29 Javascript
JQuery中使用ajax传输超大数据的解决方法
2014/07/14 Javascript
《JavaScript DOM 编程艺术》读书笔记之JavaScript 图片库
2015/01/09 Javascript
JavaScript实现数字数组按照倒序排列的方法
2015/04/06 Javascript
在JavaScript的AngularJS库中进行单元测试的方法
2015/06/23 Javascript
微信小程序 wx.uploadFile无法上传解决办法
2016/12/14 Javascript
Vue监听数据对象变化源码
2017/03/09 Javascript
echarts学习笔记之箱线图的分析与绘制详解
2017/11/22 Javascript
vue 父组件给子组件传值子组件给父组件传值的实例代码
2019/04/15 Javascript
js实现橱窗展示效果
2020/01/11 Javascript
vue接通后端api以及部署到服务器操作
2020/08/13 Javascript
利用python模拟实现POST请求提交图片的方法
2017/07/25 Python
分享一个可以生成各种进制格式IP的小工具实例代码
2017/07/28 Python
python生成excel的实例代码
2017/11/08 Python
小白如何入门Python? 制作一个网站为例
2018/03/06 Python
浅谈python下含中文字符串正则表达式的编码问题
2018/12/07 Python
Python3.5内置模块之os模块、sys模块、shutil模块用法实例分析
2019/04/27 Python
Django Rest framework解析器和渲染器详解
2019/07/25 Python
Django实现跨域请求过程详解
2019/07/25 Python
python——全排列数的生成方式
2020/02/26 Python
树莓派4B安装Tensorflow的方法步骤
2020/07/16 Python
美国面料纺织品商城:Fabric.com
2017/06/28 全球购物
是什么让J2EE适合用来开发多层的分布式的应用
2015/01/16 面试题
大学生饮食连锁店创业计划书
2014/01/17 职场文书
建筑工地文明标语
2014/10/09 职场文书
为自己工作观后感
2015/06/11 职场文书
初中团支书竞选稿
2015/11/21 职场文书
不同品牌、不同型号对讲机如何互相通联
2022/02/18 无线电
Python如何让字典保持有序排列
2022/04/29 Python
canvas 中如何实现物体的框选
2022/08/05 Javascript