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使用wxpython开发简单记事本的方法
May 20 Python
pycharm安装图文教程
May 02 Python
python网络爬虫学习笔记(1)
Apr 09 Python
python实现字符串和字典的转换
Sep 29 Python
python实现本地图片转存并重命名的示例代码
Oct 27 Python
Python线程之定位与销毁的实现
Feb 17 Python
python tkinter canvas使用实例
Nov 04 Python
python matplotlib包图像配色方案分享
Mar 14 Python
Python3.x+pyqtgraph实现数据可视化教程
Mar 14 Python
基于virtualenv创建python虚拟环境过程图解
Mar 30 Python
Python使用文件操作实现一个XX信息管理系统的示例
Jul 02 Python
理解python中装饰器的作用
Jul 21 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的无限分类实现想法~
2007/01/02 PHP
PHP 的 __FILE__ 常量
2007/01/15 PHP
利用curl抓取远程页面内容的示例代码
2013/07/23 PHP
PHP面向对象程序设计之接口用法
2014/08/20 PHP
laravel框架中视图的基本使用方法分析
2019/11/23 PHP
thinkphp5 框架结合plupload实现图片批量上传功能示例
2020/04/04 PHP
Javascript 键盘keyCode键码值表
2009/12/24 Javascript
JS小功能(offsetLeft实现图片滚动效果)实例代码
2013/11/28 Javascript
js获取触发事件元素在整个网页中的绝对坐标(示例代码)
2013/12/13 Javascript
jquery中获得元素尺寸和坐标的方法整理
2014/05/18 Javascript
javascript中拼接HTML字符串的最快、最好的方法
2014/06/07 Javascript
nw.js实现类似微信的聊天软件
2015/03/16 Javascript
JS简单实现点击复制链接的方法
2016/08/03 Javascript
JavaScript易错知识点整理
2016/12/05 Javascript
jQuery zTree树插件简单使用教程
2017/01/10 Javascript
Nodejs处理异常操作示例
2018/12/25 NodeJs
详解vue挂载到dom上会发生什么
2019/01/20 Javascript
200行HTML+JavaScript实现年会抽奖程序
2019/01/22 Javascript
原生js实现获取form表单数据代码实例
2019/03/27 Javascript
Vue拖拽组件列表实现动态页面配置功能
2019/06/17 Javascript
Vue filter 过滤当前时间 实现实时更新效果
2019/12/20 Javascript
微信小程序swiper组件实现抖音翻页切换视频功能的实例代码
2020/06/24 Javascript
js实现弹窗效果
2020/08/09 Javascript
[46:25]DOTA2上海特级锦标赛主赛事日 - 4 败者组第五轮 MVP.Phx VS EG第二局
2016/03/05 DOTA
[46:20]TFT vs Secret Supermajor小组赛C组 BO3 第二场 6.3
2018/06/04 DOTA
Python中的异常处理学习笔记
2015/01/28 Python
Python之多线程爬虫抓取网页图片的示例代码
2018/01/10 Python
Python中pillow知识点学习
2018/04/30 Python
马来西亚最好的婴儿商店:Motherhood
2017/09/14 全球购物
家庭睡衣和家庭用品:Little Blue House
2018/03/18 全球购物
办公室主任主任岗位责任制
2014/02/11 职场文书
机械工程及自动化专业求职信
2014/09/03 职场文书
2016年10月份红领巾广播稿
2015/12/21 职场文书
2019银行员工个人工作自我鉴定
2019/06/27 职场文书
JVM入门之类加载与字节码技术(类加载与类的加载器)
2021/06/15 Java/Android
apache ftpserver搭建ftp服务器
2022/05/20 Servers