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 相关文章推荐
python3基于OpenCV实现证件照背景替换
Jul 18 Python
Python实现获取本地及远程图片大小的方法示例
Jul 21 Python
Pandas过滤dataframe中包含特定字符串的数据方法
Nov 07 Python
Python设计模式之简单工厂模式实例详解
Jan 22 Python
Python-ElasticSearch搜索查询的讲解
Feb 25 Python
python实现连连看辅助(图像识别)
Mar 25 Python
python pandas 时间日期的处理实现
Jul 30 Python
Python 获取项目根路径的代码
Sep 27 Python
Pandas 解决dataframe的一列进行向下顺移问题
Dec 27 Python
python3操作注册表的方法(Url protocol)
Feb 05 Python
为什么说python适合写爬虫
Jun 11 Python
python接口自动化之ConfigParser配置文件的使用详解
Aug 03 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中new static() 和 new self() 的区别介绍
2015/01/09 PHP
php读取der格式证书乱码解决方法
2015/06/22 PHP
js转义字符介绍
2013/11/05 Javascript
Javascript基础教程之break和continue语句
2015/01/18 Javascript
js实现点击图片改变页面背景图的方法
2015/02/28 Javascript
JavaScript变量的作用域全解析
2015/08/14 Javascript
js实现随屏幕滚动的带缓冲效果的右下角广告代码
2015/09/04 Javascript
javascript基于prototype实现类似OOP继承的方法
2015/12/16 Javascript
jquery ztree实现树的搜索功能
2016/02/25 Javascript
js实现随机数字字母验证码
2017/06/19 Javascript
简单实现js鼠标跟随效果
2020/08/02 Javascript
从零到一详聊创建Vue工程及遇到的常见问题
2019/04/25 Javascript
使用Vue CLI创建typescript项目的方法
2019/08/09 Javascript
使用preload预加载页面资源时注意事项
2020/02/03 Javascript
python字符串对其居中显示的方法
2015/07/11 Python
Python获取二维矩阵每列最大值的方法
2018/04/03 Python
python的格式化输出(format,%)实例详解
2018/06/01 Python
基于DATAFRAME中元素的读取与修改方法
2018/06/08 Python
python调用其他文件函数或类的示例
2019/07/16 Python
Python拆分大型CSV文件代码实例
2019/10/07 Python
Python远程开发环境部署与调试过程图解
2019/12/09 Python
python 爬取小说并下载的示例
2020/12/07 Python
德国体育用品网上商店:SC24.com
2016/08/01 全球购物
怎样在 Applet 中建立自己的菜单(MenuBar/Menu)?
2012/06/20 面试题
浅谈react路由传参的几种方式
2021/03/23 Javascript
党校培训思想汇报
2014/01/03 职场文书
高中生综合素质自我评价
2015/03/06 职场文书
2015年高考寄语或鼓励的话
2015/03/23 职场文书
2015年幼儿园安全工作总结
2015/05/12 职场文书
2015年学校信息技术工作总结
2015/05/25 职场文书
毕业设计答辩开场白
2015/05/29 职场文书
党小组推荐意见
2015/06/02 职场文书
怎样写好演讲稿题目?
2019/08/21 职场文书
微信小程序 WeUI扩展组件库的入门教程
2022/04/21 Javascript
MySQL使用IF语句及用case语句对条件并结果进行判断 
2022/09/23 MySQL