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列表append和+的区别浅析
Feb 02 Python
python通过pil将图片转换成黑白效果的方法
Mar 16 Python
WINDOWS 同时安装 python2 python3 后 pip 错误的解决方法
Mar 16 Python
python实现聚类算法原理
Feb 12 Python
对Python发送带header的http请求方法详解
Jan 02 Python
python实现银联支付和支付宝支付接入
May 07 Python
python pyinstaller 加载ui路径方法
Jun 10 Python
Django中的用户身份验证示例详解
Aug 07 Python
Pandas DataFrame中的tuple元素遍历的实现
Oct 23 Python
Python类成员继承重写的实现
Sep 16 Python
浅析Python requests 模块
Oct 09 Python
python制作图形界面的2048游戏, 基于tkinter
Apr 06 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函数代码
2010/04/22 PHP
超级好用的一个php上传图片类(随机名,缩略图,加水印)
2010/06/30 PHP
php 在线导入mysql大数据程序
2015/06/11 PHP
基于jquery的关于动态创建DOM元素的问题
2010/12/24 Javascript
javascript数组遍历for与for in区别详解
2014/12/04 Javascript
jQuery实现新消息闪烁标题提示的方法
2015/03/11 Javascript
JavaScript实现MIPS乘法模拟的方法
2015/04/17 Javascript
浅谈JS中的三种字符串连接方式及其性能比较
2016/09/02 Javascript
jQuery时间验证和转换为标准格式的时间格式
2017/03/06 Javascript
footer定位页面底部(代码分享)
2017/03/07 Javascript
AjaxUpLoad.js实现文件上传
2018/03/05 Javascript
微信小程序实现的日期午别医生排班表功能示例
2019/01/09 Javascript
vue中各种通信传值方式总结
2019/02/14 Javascript
websocket4.0+typescript 实现热更新的方法
2019/08/14 Javascript
vue iview的菜单组件Mune 点击不高亮的解决方案
2019/11/01 Javascript
Vue前端项目部署IIS的实现
2020/01/06 Javascript
ant design的table组件实现全选功能以及自定义分页
2020/11/17 Javascript
Python写的贪吃蛇游戏例子
2014/06/16 Python
python得到qq句柄,并显示在前台的方法
2018/10/14 Python
Python Pexpect库的简单使用方法
2019/01/29 Python
Python 按字典dict的键排序,并取出相应的键值放于list中的实例
2019/02/12 Python
Python中asyncio模块的深入讲解
2019/06/10 Python
python字符串Intern机制详解
2019/07/01 Python
删除pycharm鼠标右键快捷键打开项目的操作
2021/01/16 Python
中国双语服务优势的在线购票及活动平台:247tickets
2018/10/26 全球购物
澳大利亚人信任的清洁平台,您的私人管家:Jarvis
2020/12/25 全球购物
写一个函数,要求输入一个字符串和一个字符长度,对该字符串进行分隔
2015/07/30 面试题
农林环境专业求职信
2014/03/13 职场文书
阅兵口号
2014/06/19 职场文书
暑期培训班招生方案
2014/08/26 职场文书
农村党建工作汇报材料
2014/10/27 职场文书
2014年小学英语教师工作总
2014/12/03 职场文书
2015年预防青少年违法犯罪工作总结
2015/05/22 职场文书
2016幼儿园教师年度考核评语
2015/12/01 职场文书
Nginx + consul + upsync 完成动态负载均衡的方法详解
2021/03/31 Servers
MySQL主从搭建(多主一从)的实现思路与步骤
2021/05/13 MySQL