Python生成器传参数及返回值原理解析
作者:Mars.wang 发布时间:2022-03-17 08:58:40
标签:Python,生成器,返回值
一.生成器简介
在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'
来源:https://www.cnblogs.com/wangbin2188/p/13044748.html
0
投稿
猜你喜欢
- 一、自定义分页1、基础版自定义分页data = []for i in range(1, 302): tmp = {"i
- 本文实例为大家分享了树回归的具体代码,供大家参考,具体内容如下#-*- coding:utf-8 -*- #!/usr/bin/python
- 本文实例讲述了Python基于Socket实现的简单聊天程序。分享给大家供大家参考,具体如下:需求:SCIENCE 和MOOD两个人软件专业
- 1. 介绍上传的图片文件:如pic = request.FILES["picture"]# pic是 <class
- 最近有个需求,用多线程比较合适,但是我需要每个线程的返回值,这就需要我在threading.Thread的基础上进行封装import thr
- 单例模式单例模式(Singleton Pattern)是一种常用的软件设计模式,该模式的主要目的是确保某一个类只有一个实例存在。当你希望在整
- 说明1、利用_slots__类属性,可以将实例属性存储在元zu中,大大节省了存储空间。2、所有属性都必须定义为__slots__元组,子类还
- Ubuntu 18.04下1、安装python 2._版本,输入 sudo apt install python命令行输入 python或p
- 背景pytorch作为深度学习的计算框架正得到越来越多的应用.我们除了在模型训练阶段应用外,最近也把pytorch应用在了部署上.在部署时,
- 方法一1. 下载MySQL源码分发包,不用区分操作系统,我们需要的东西是一样的;2. 重命名自己的mysql的data目录下的mysql文件
- 修改python plot折线图的坐标轴刻度,这里修改为整数:代码如下:from matplotlib import pyplot as p
- 前言作为Web开发人员,在 Web浏览器中存储数据以改善用户体验和提升Web应用程序性能是非常常见的。在大多数情况下,可供我们使用就是Loc
- 目标站点分析本次要抓取的目标站点为:中介网,这个网站提供了网站排行榜、互联网网站排行榜、中文网站排行榜等数据。网站展示的样本数据量是 :58
- 死锁的原理非常简单,用一句话就可以描述完。就是当多线程访问多个锁的时候,不同的锁被不同的线程持有,它们都在等待其他线程释放出锁来,于是便陷入
- Python能够干嘛?可以做日常任务,比如自动备份你的MP3;可以做网站,很多著名的网站像知乎、YouTube就是Python写的;可以做网
- 本文实例讲述了Python3.5面向对象编程。分享给大家供大家参考,具体如下:1、面向过程与面向对象的比较(1)面向过程编程(procedu
- 一,封装封装是面向对象编程思想的重要特征之一。(一)什么是封装封装是一个抽象对象的过程,它容纳了对象的属性和行为实现细节,并以此对外提供公共
- 一.思路我们通过网页版的微信公众平台的图文消息中的超链接获取到我们需要的接口从接口中我们可以得到对应的微信公众号和对应的所有微信公众号文章。
- 这一段要毕业,得折磨自己两个月....这段时间还是会摆弄了javascript的.大致在下面两个方面: 1.javascript的
- 一、前言在程序中,有很多高效率的字符串处理方式,如果开发者能够完全掌握这些高效的字符串处理,往往在开发者也能事半功倍。比如针对于字符串的处理