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及PyCharm下载与安装教程
Nov 18 Python
基于Python实现的微信好友数据分析
Feb 26 Python
Python机器学习之scikit-learn库中KNN算法的封装与使用方法
Dec 14 Python
python config文件的读写操作示例
Sep 27 Python
python队列原理及实现方法示例
Nov 27 Python
Python3.7黑帽编程之病毒篇(基础篇)
Feb 04 Python
tensorflow将图片保存为tfrecord和tfrecord的读取方式
Feb 17 Python
Python3.6安装卸载、执行命令、执行py文件的方法详解
Feb 20 Python
Selenium基于PIL实现拼接滚动截图
Apr 10 Python
基于django micro搭建网站实现加水印功能
May 22 Python
解决python图像处理图像赋值后变为白色的问题
Jun 04 Python
jupyter使用自动补全和切换默认浏览器的方法
Nov 18 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
提升PHP执行速度全攻略(下)
2006/10/09 PHP
PHP实现多图片上传类实例
2014/07/26 PHP
thinkphp3.2.2实现生成多张缩略图的方法
2014/12/19 PHP
Yii2中事务的使用实例代码详解
2016/09/07 PHP
一些常用的Javascript函数
2006/12/22 Javascript
JQuery 选项卡效果(JS与HTML的分离)
2010/04/01 Javascript
jQuery 技巧小结
2010/04/02 Javascript
javascript 函数使用说明
2010/04/07 Javascript
用Javascript获取页面元素的具体位置
2013/12/09 Javascript
js用Date对象的setDate()函数对日期进行加减操作
2014/09/18 Javascript
JS获取当前页面名称的简单实例
2016/08/19 Javascript
详解ES6中的 Set Map 数据结构学习总结
2018/11/06 Javascript
vue+element实现表单校验功能
2019/05/20 Javascript
在Vue项目中,防止页面被缩放和放大示例
2019/10/28 Javascript
js 闭包深入理解与实例分析
2020/03/19 Javascript
JavaScript中window和document用法详解
2020/07/28 Javascript
python list 合并连接字符串的方法
2013/03/09 Python
Python的Django框架下管理站点的基本方法
2015/07/17 Python
Python端口扫描简单程序
2016/11/10 Python
Python3多线程基础知识点
2019/02/19 Python
python递归下载文件夹下所有文件
2019/08/31 Python
Python基于WordCloud制作词云图
2019/11/29 Python
python3实现在二叉树中找出和为某一值的所有路径(推荐)
2019/12/26 Python
python利用paramiko实现交换机巡检的示例
2020/09/22 Python
CSS3径向渐变之大鱼吃小鱼之孤单的大鱼
2016/04/26 HTML / CSS
美国时尚孕妇装品牌:A Pea in the Pod
2017/07/16 全球购物
First Aid Beauty官网:FAB急救面霜
2018/05/24 全球购物
哈萨克斯坦移动和数字技术在线商店:SatelOnline.kz
2020/09/04 全球购物
写出SQL四条最基本的数据操作语句(DML)
2012/12/12 面试题
电气自动化大学生求职信
2013/10/16 职场文书
老公爱的承诺书
2014/03/31 职场文书
考试没考好检讨书
2015/05/06 职场文书
人民检察院起诉书
2015/05/20 职场文书
中秋节晚会开场白
2015/05/29 职场文书
创业计划书之游泳馆
2019/09/16 职场文书
Python中的min及返回最小值索引的操作
2021/05/10 Python