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的Flask框架与数据库连接的教程
Apr 20 Python
浅谈Python中函数的参数传递
Jun 21 Python
Python数据分析之如何利用pandas查询数据示例代码
Sep 01 Python
Python实现随机选择元素功能
Sep 14 Python
对Python中TKinter模块中的Label组件实例详解
Jun 14 Python
PyQt5 实现字体大小自适应分辨率的方法
Jun 18 Python
OpenCV3.0+Python3.6实现特定颜色的物体追踪
Jul 23 Python
python 实现图片上传接口开发 并生成可以访问的图片url
Dec 18 Python
浅谈Python中的继承
Jun 19 Python
手把手教你如何用Pycharm2020.1.1配置远程连接的详细步骤
Aug 07 Python
教你怎么用python爬取爱奇艺热门电影
May 20 Python
matplotlib如何设置坐标轴刻度的个数及标签的方法总结
Jun 11 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
Apache2 httpd.conf 中文版
2006/11/17 PHP
php实现模拟登陆方正教务系统抓取课表
2015/05/19 PHP
基于PHP+Mysql简单实现了图书购物车系统的实例详解
2020/08/06 PHP
Javascript倒计时页面跳转实例小结
2013/09/11 Javascript
NodeJS url验证(url-valid)的使用方法
2013/11/18 NodeJs
详解AngularJS中module模块的导入导出
2015/12/10 Javascript
js简单实现调整网页字体大小的方法
2016/07/23 Javascript
js动态生成form 并用ajax方式提交的实现方法
2016/09/09 Javascript
利用Node.js制作爬取大众点评的爬虫
2016/09/22 Javascript
Node.js与MySQL交互操作及其注意事项
2016/10/05 Javascript
JavaScript中for循环的几种写法与效率总结
2017/02/03 Javascript
jq stop()和:is(:animated)的用法及区别(详解)
2017/02/12 Javascript
jquery事件与绑定事件
2017/03/16 Javascript
ES6新特性三: Generator(生成器)函数详解
2017/04/21 Javascript
websocket+node.js实现实时聊天系统问题咨询
2017/05/17 Javascript
vue.js实现刷新当前页面的方法教程
2017/07/05 Javascript
浅谈JavaScript作用域和闭包
2017/09/18 Javascript
详解设置Webstorm 利用babel将ES6自动转码成ES5
2017/12/20 Javascript
微信小程序使用template标签实现五星评分功能
2018/11/03 Javascript
[01:18]PWL开团时刻DAY4——圣剑与抢盾
2020/11/03 DOTA
Python while、for、生成器、列表推导等语句的执行效率测试
2015/06/03 Python
Python通过RabbitMQ服务器实现交换机功能的实例教程
2016/06/29 Python
django项目运行因中文而乱码报错的几种情况解决
2017/11/07 Python
mac下pycharm设置python版本的图文教程
2018/06/13 Python
Django中的forms组件实例详解
2018/11/08 Python
在Python中COM口的调用方法
2019/07/03 Python
python实现的接收邮件功能示例【基于网易POP3服务器】
2019/09/11 Python
Tensorflow实现在训练好的模型上进行测试
2020/01/20 Python
Python获取指定网段正在使用的IP
2020/12/14 Python
纯HTML5+CSS3制作图片旋转
2016/01/12 HTML / CSS
GafasWorld西班牙:购买太阳镜、眼镜和隐形眼镜
2019/09/08 全球购物
高二化学教学反思
2014/01/30 职场文书
酒店优秀员工事迹材料
2014/06/02 职场文书
储备店长岗位职责
2015/04/14 职场文书
Golang: 内建容器的用法
2021/05/05 Golang
CSS实现背景图片全屏铺满自适应的3种方式
2022/07/07 HTML / CSS