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通过线程实现定时器timer的方法
Mar 16 Python
wxPython定时器wx.Timer简单应用实例
Jun 03 Python
python轻松查到删除自己的微信好友
Jan 10 Python
怎样使用Python脚本日志功能
Aug 14 Python
Django应用程序中如何发送电子邮件详解
Feb 04 Python
Anaconda多环境多版本python配置操作方法
Sep 12 Python
python批量实现Word文件转换为PDF文件
Mar 15 Python
Python线程障碍对象Barrier原理详解
Dec 02 Python
Python识别html主要文本框过程解析
Feb 18 Python
浅谈python 中的 type(), dtype(), astype()的区别
Apr 09 Python
Python实现AI换脸功能
Apr 10 Python
Python 图片处理库exifread详解
Feb 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
乐信RP2100的电路分析和打磨
2021/03/02 无线电
php 生成WML页面方法详解
2009/08/09 PHP
php在数据库抽象层简单使用PDO的方法
2015/11/03 PHP
php加密之discuz内容经典加密方式实例详解
2017/02/04 PHP
PHP将英文数字转换为阿拉伯数字实例讲解
2019/01/28 PHP
使用git迁移Laravel项目至新开发环境的步骤详解
2020/04/06 PHP
服务器安全设置的几个注册表设置
2007/07/28 Javascript
XMLHTTP 乱码的解决方法(UTF8,GB2312 编码 解码)
2011/01/12 Javascript
求数组最大最小值方法适用于任何数组
2013/08/16 Javascript
利用javascript判断文件是否存在
2013/12/31 Javascript
jquery分页插件jpaginate在IE中不兼容问题
2014/04/22 Javascript
Jquery 实现grid绑定模板
2015/01/28 Javascript
javascript实现当前页导航激活的方法
2015/02/27 Javascript
Javascript URI 解析介绍
2015/03/15 Javascript
基于jquery ui的alert,confirm方案(支持换肤)
2015/04/03 Javascript
jquery ezUI 双击行记录弹窗查看明细的实现方法
2016/06/01 Javascript
jQuery webuploader分片上传大文件
2016/11/07 Javascript
Vue.js开发环境搭建
2016/11/10 Javascript
JS前端笔试题分析
2016/12/19 Javascript
浅谈JsonObject中的key-value数据解析排序问题
2017/12/06 Javascript
原生JS实现循环Nodelist Dom列表的4种方式示例
2018/02/11 Javascript
在JavaScript中使用严格模式(Strict Mode)
2019/06/13 Javascript
微信小程序 SOTER 生物认证DEMO 指纹识别功能
2019/12/13 Javascript
[56:00]2018DOTA2亚洲邀请赛 4.6 淘汰赛 VP vs TNC 第二场
2018/04/10 DOTA
[34:10]Secret vs VG 2019国际邀请赛淘汰赛 败者组 BO3 第二场 8.24
2019/09/10 DOTA
全面解读Python Web开发框架Django
2014/06/30 Python
python实现用于测试网站访问速率的方法
2015/05/26 Python
Python 进程之间共享数据(全局变量)的方法
2019/07/16 Python
python保留小数位的三种实现方法
2020/01/07 Python
部署Django到阿里云服务器教程示例
2020/06/03 Python
30岁生日感言
2014/01/25 职场文书
十八届三中全会感言
2014/03/10 职场文书
2014年办公室个人工作总结
2014/11/12 职场文书
大学生毕业个人总结
2015/02/15 职场文书
springboot中一些比较常用的注解总结
2021/06/11 Java/Android
vue3中provide && inject的使用
2021/07/01 Vue.js