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通过pil模块获得图片exif信息的方法
Mar 16 Python
详解Python中的文件操作
Aug 28 Python
Python中optparser库用法实例详解
Jan 26 Python
Python使用字典的嵌套功能详解
Feb 27 Python
python 设置输出图像的像素大小方法
Jul 04 Python
python按行读取文件并找出其中指定字符串
Aug 08 Python
Python学习笔记之字符串和字符串方法实例详解
Aug 22 Python
Python数据分析模块pandas用法详解
Sep 04 Python
python如何解析复杂sql,实现数据库和表的提取的实例剖析
May 15 Python
解决pyinstaller 打包exe文件太大,用pipenv 缩小exe的问题
Jul 13 Python
基于Python实现简单学生管理系统
Jul 24 Python
python 多线程死锁问题的解决方案
Aug 25 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快速url重写更新版[需php 5.30以上]
2010/04/25 PHP
php setcookie函数的参数说明及其用法
2014/04/20 PHP
分享php多功能图片处理类
2016/05/15 PHP
PHP错误和异常处理功能模块示例
2016/11/12 PHP
PHP判断文件是否被引入的方法get_included_files用法示例
2016/11/29 PHP
PHP hex2bin()函数用法讲解
2019/02/25 PHP
jquery实现的网页自动播放声音
2014/04/30 Javascript
JavaScript使用Max函数返回两个数字中较大数的方法
2015/04/06 Javascript
javascript动态创建表格及添加数据实例详解
2015/05/13 Javascript
jquery不常用方法汇总
2015/07/26 Javascript
Bootstrap登陆注册页面开发教程
2016/07/12 Javascript
JavaScript ES6中CLASS的使用详解
2016/11/22 Javascript
利用NPM淘宝的node.js镜像加速nvm
2017/03/27 Javascript
深入学习js函数的隐式参数 arguments 和 this
2019/06/24 Javascript
Vue props中Object和Array设置默认值操作
2020/07/30 Javascript
写一个Vue loading 插件
2020/11/09 Javascript
[42:34]VP vs VG 2018国际邀请赛小组赛BO2 第一场 8.19
2018/08/21 DOTA
Python中字典和JSON互转操作实例
2015/01/19 Python
分享一下Python 开发者节省时间的10个方法
2015/10/02 Python
CentOS安装pillow报错的解决方法
2016/01/27 Python
pandas 数据实现行间计算的方法
2018/06/08 Python
python 筛选数据集中列中value长度大于20的数据集方法
2018/06/14 Python
Pythony运维入门之Socket网络编程详解
2019/04/15 Python
django框架用户权限中的session缓存到redis中的方法
2019/08/06 Python
Python tkinter实现图片标注功能(完整代码)
2019/12/08 Python
基于pytorch的lstm参数使用详解
2020/01/14 Python
Java byte数组操纵方式代码实例解析
2020/07/22 Python
Lombok插件安装(IDEA)及配置jar包使用详解
2020/11/04 Python
Django URL参数Template反向解析
2020/11/24 Python
一年级学生评语
2014/04/23 职场文书
旷工检讨书1000字
2015/01/01 职场文书
大学考试作弊检讨书
2015/05/06 职场文书
2015年科协工作总结
2015/05/19 职场文书
母亲节主题班会
2015/08/14 职场文书
2016年春节问候语
2015/11/11 职场文书
忘记Grafana不要紧2种Grafana重置admin密码方法详细步骤
2022/04/07 Servers