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 相关文章推荐
PyQt5 QSerialPort子线程操作的实现
Apr 21 Python
python 读取DICOM头文件的实例
May 07 Python
Python机器学习库scikit-learn安装与基本使用教程
Jun 25 Python
使用python将图片按标签分入不同文件夹的方法
Dec 08 Python
python根据url地址下载小文件的实例
Dec 18 Python
Python对象与引用的介绍
Jan 24 Python
Python实现获取系统临时目录及临时文件的方法示例
Jun 26 Python
python UDP(udp)协议发送和接收的实例
Jul 22 Python
django商品分类及商品数据建模实例详解
Jan 03 Python
PyCharm设置注释字体颜色以及是否倾斜的操作
Sep 16 Python
selenium自动化测试入门实战
Dec 21 Python
python中的装饰器该如何使用
Jun 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
smarty中先strip_tags过滤html标签后truncate截取文章运用
2010/10/25 PHP
PHP 查找字符串常用函数介绍
2012/06/07 PHP
php不允许用户提交空表单(php空值判断)
2013/11/12 PHP
php CI框架插入一条或多条sql记录示例
2014/07/29 PHP
PHP定时执行任务的3种方法详解
2015/12/21 PHP
PHP实现一个多功能购物网站的案例
2017/09/13 PHP
Dom加载让图片加载完再执行的脚本代码
2008/05/15 Javascript
jQuery select操作控制方法小结
2010/05/26 Javascript
Jquery工作常用实例 使用AJAX使网页进行异步更新
2011/07/26 Javascript
使用jquery+CSS3实现仿windows10开始菜单的下拉导航菜单特效
2015/09/24 Javascript
JavaScript面试题(指针、帽子和女朋友)
2016/11/23 Javascript
webpack 静态资源集中输出的方法示例
2018/11/09 Javascript
jQuery实现的五星点评功能【案例】
2019/02/18 jQuery
Vue实现购物车详情页面的方法
2019/08/20 Javascript
vant 自定义 van-dropdown-item的用法
2020/08/05 Javascript
python使用range函数计算一组数和的方法
2015/05/07 Python
Python编码爬坑指南(必看)
2016/06/10 Python
Python 基础教程之闭包的使用方法
2017/09/29 Python
浅谈python装饰器探究与参数的领取
2017/12/01 Python
pandas.DataFrame选取/排除特定行的方法
2018/07/03 Python
python re正则匹配网页中图片url地址的方法
2018/12/20 Python
Python实现正则表达式匹配任意的邮箱方法
2018/12/20 Python
python3.6使用tkinter实现弹跳小球游戏
2019/05/09 Python
python GUI实现小球满屏乱跑效果
2019/05/09 Python
Pytorch GPU显存充足却显示out of memory的解决方式
2020/01/13 Python
Python日志syslog使用原理详解
2020/02/18 Python
使用pycharm和pylint检查python代码规范操作
2020/06/09 Python
Django后端按照日期查询的方法教程
2021/02/28 Python
详解CSS3的图层阴影和文字阴影效果使用
2016/06/09 HTML / CSS
html5 标签
2009/07/16 HTML / CSS
宝拉珍选澳大利亚官方购物网站:Paula’s Choice澳大利亚
2016/09/13 全球购物
澳大利亚在线消费电子产品商店:TobyDeals
2020/01/05 全球购物
计算机通信工程专业毕业生推荐信
2013/12/24 职场文书
八年级物理教学反思
2014/01/19 职场文书
个人批评与自我批评材料
2014/10/17 职场文书
小学庆六一主持词
2015/06/30 职场文书