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从ftp下载数据保存实例
Nov 20 Python
极简的Python入门指引
Apr 01 Python
Python实现的数据结构与算法之双端队列详解
Apr 22 Python
50行Python代码实现人脸检测功能
Jan 23 Python
利用TensorFlow训练简单的二分类神经网络模型的方法
Mar 05 Python
Python批量修改图片分辨率的实例代码
Jul 04 Python
django3.02模板中的超链接配置实例代码
Feb 04 Python
PyQt5中向单元格添加控件的方法示例
Mar 24 Python
python 中的9个实用技巧,助你提高开发效率
Aug 30 Python
python 读取串口数据的示例
Nov 09 Python
selenium+python实现基本自动化测试的示例代码
Jan 27 Python
Python Django搭建文件下载服务器的实现
May 10 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转换文件夹下所有文件编码的实现代码
2013/06/06 PHP
ThinkPHP实现多数据库连接的解决方法
2014/07/01 PHP
php格式输出文件var_export函数实例
2014/11/15 PHP
php生成二维码时出现中文乱码的解决方法
2014/12/18 PHP
laravel安装zend opcache加速器教程
2015/03/02 PHP
PHP按指定键值对二维数组进行排序的方法
2015/12/22 PHP
PHP常用函数总结(180多个)
2016/12/25 PHP
一个简单的js渐显(fadeIn)渐隐(fadeOut)类
2010/06/19 Javascript
jQuery 全选/反选以及单击行改变背景色实例
2013/07/02 Javascript
js的.innerHTML = &quot;&quot;IE9下显示有错误的解决方法
2013/09/16 Javascript
JavaScript实现的一个计算数字步数的算法分享
2014/12/06 Javascript
AngularJS使用指令增强标准表单元素功能
2016/07/01 Javascript
解决vue处理axios post请求传参的问题
2018/03/05 Javascript
学习React中ref的两个demo示例
2018/08/14 Javascript
vue鼠标移入添加class样式,鼠标移出去除样式(active)实现方法
2018/08/22 Javascript
react项目实践之webpack-dev-serve
2018/09/14 Javascript
[03:17]DOTA2英雄基础教程 剧毒术士
2013/12/12 DOTA
Python sqlite3事务处理方法实例分析
2017/06/19 Python
基于Python log 的正确打开方式
2018/04/28 Python
python中int与str互转方法
2018/07/02 Python
Pyinstaller 打包exe教程及问题解决
2019/08/16 Python
python matplotlib拟合直线的实现
2019/11/19 Python
python 实现图像快速替换某种颜色
2020/06/04 Python
Pycharm操作Git及GitHub的步骤详解
2020/10/27 Python
pycharm 2020.2.4 pip install Flask 报错 Error:Non-zero exit code的问题
2020/12/04 Python
Python扫描端口的实现
2021/01/25 Python
H5 meta小结(前端必看篇)
2016/08/24 HTML / CSS
美国专业级皮肤病和spa品质护肤品的高级零售网站:SkinCareRx
2017/02/06 全球购物
Bench加拿大官方网站:英国城市服装品牌
2017/11/03 全球购物
Calphalon美国官网:美国顶级锅具品牌
2020/02/05 全球购物
外语系毕业生自荐信范文
2013/12/16 职场文书
内衣营销方案
2014/03/15 职场文书
《画杨桃》教学反思
2014/04/13 职场文书
旅游局领导班子“四风”问题对照检查材料思想汇报
2014/09/29 职场文书
管理失职检讨书
2015/05/05 职场文书
化妆品促销活动总结
2015/05/07 职场文书