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中文编码问题小结
Sep 28 Python
Python实现简单的文件传输与MySQL备份的脚本分享
Jan 03 Python
django model去掉unique_together报错的解决方案
Oct 18 Python
Python实现一个简单的验证码程序
Nov 03 Python
Django model update的多种用法介绍
Mar 28 Python
Python的Tkinter点击按钮触发事件的例子
Jul 19 Python
Python 获取项目根路径的代码
Sep 27 Python
如何用OpenCV -python3实现视频物体追踪
Dec 04 Python
Python基础之字典常见操作经典实例详解
Feb 26 Python
Python求解排列中的逆序数个数实例
May 03 Python
numpy的Fancy Indexing和array比较详解
Jun 11 Python
Python析构函数__del__定义原理解析
Nov 20 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判断一个数组是否为有序的方法
2015/03/27 PHP
php while循环控制的简单实例
2016/05/30 PHP
PHP微信公众号自动发送红包API
2016/06/01 PHP
Referer原理与图片防盗链实现方法详解
2019/07/03 PHP
解决Laravel 不能创建 migration 的问题
2019/10/09 PHP
php操作redis数据库常见方法实例总结
2020/02/20 PHP
如何在Web页面上直接打开、编辑、创建Office文档
2007/03/12 Javascript
JSQL  一个 web DB 的封装
2010/05/05 Javascript
javascript小数四舍五入多种方法实现
2012/12/23 Javascript
jquery 按键盘上的enter事件
2014/05/11 Javascript
AngularJS实现表单验证
2015/01/28 Javascript
javascript实现日期按月份加减
2015/05/15 Javascript
prototype框架中美元符号$用法分析
2016/01/22 Javascript
JS表格组件神器bootstrap table详解(强化版)
2016/05/26 Javascript
JavaScript中的事件委托及好处
2016/07/12 Javascript
ionic2屏幕适配实现适配手机、平板等设备的示例代码
2017/08/11 Javascript
Vue实现用户自定义字段显示数据的方法
2018/08/28 Javascript
vue+iview 兼容IE11浏览器的实现方法
2019/01/07 Javascript
VUE+Element环境搭建与安装的方法步骤
2019/01/24 Javascript
[48:30]LGD vs infamous Supermajor小组赛D组 BO3 第一场 6.3
2018/06/04 DOTA
Python遍历文件夹和读写文件的实现代码
2016/08/28 Python
Python编程实现数学运算求一元二次方程的实根算法示例
2017/04/02 Python
python 实时得到cpu和内存的使用情况方法
2018/06/11 Python
Python求一批字符串的最长公共前缀算法示例
2019/03/02 Python
Python字典对象实现原理详解
2019/07/01 Python
python 实现GUI(图形用户界面)编程详解
2019/07/17 Python
Pytorch 使用 nii数据做输入数据的操作
2020/05/26 Python
Django之腾讯云短信的实现
2020/06/12 Python
使用pytorch实现论文中的unet网络
2020/06/24 Python
深入理解HTML5定时器requestAnimationFrame的使用
2018/12/12 HTML / CSS
财务会计人员求职的自我评价
2014/01/13 职场文书
《圆明园的毁灭》教学反思
2014/02/28 职场文书
2014年五四青年节演讲稿范文
2014/04/22 职场文书
酒店节能降耗方案
2014/05/08 职场文书
2014年房地产工作总结范文
2014/11/19 职场文书
诚信考试主题班会
2015/08/17 职场文书