yield python_python yield详解
# -*- coding:utf-8 -*-
from tornado import gen
def h():
print 'nihao',
m = yield 2
print m
d = yield 12
print d
aaa = yield 13
print 'jieshule!!!'
c = h()
m = c.next()
d = c.send('caiqing')
aaa = c.send('xixi')
print m,d,aaa
nihao caiqing
xixi
2 12 13
有yield的函数已经成为一个生成器了,并且,直接调用函数是不会执行生成器里面的代码,只有使用next()或者send(),才会被执行生成器里面的函数。
第一次使用next()的时候,代码会执行到第一个yield(并且获取了yield 返回值 2),也就是本文中的 m = yield 2 ,后面的print m没有被执行,send()也是这样。
send()可以看来,是用来传递第一个参数,也就是将send()里面的内容传递给m ,也就是m = 参数值,所以print m 最后输出的是send(),括号里面的值。以此类推。
总结,可以理解为,next()和send()其实原理都差不多,都是从当前执行到下一个yield(不包含下一个yield,就算下一个前面有print,但是print 后面没有yield,也不会去执行。)
不懂得可以看看这个实例:https://www.cnblogs.com/maoxiaolv/p/6425875.html
有些朋友看了以后,后台和我留言,让我把脚本的步骤下来:
# coding:utf-8
def consumer():
r = ''
while True:
n = yield r
if not n:
return
print("consumer :%s" % n)
r = '200 OK'
def product(c):
a = c.__next__()
# print(a)
i = 0
while i < 5:
i += 1
print("product: %s" % i)
r = c.send(i)
print("consumer return :%s" % r)
c.close()
c = consumer()
product(c)
---- result ----
product: 1
consumer :1
consumer return :200 OK
product: 2
consumer :2
consumer return :200 OK
product: 3
consumer :3
consumer return :200 OK
product: 4
consumer :4
consumer return :200 OK
product: 5
consumer :5
consumer return :200 OK
脚本详解:
# 综合上面可以看出,无论是next()还是send(),都是执行到当前的yield,如果后面有yield,后面的逻辑就执行,如果没有,就不执行了,即使后面是print 也不会执行。
# next()=send(None)
# 上面的脚本执行逻辑为,c.__next__()对应consumer()中的,r = ''; while True:; n = yield r(也就是n = None);
# 而c.send(i)对应consumer()中的,if not n(也就是if not None):; return;
# n = yield r(也就是n = i); if not n(也就是if not i):; print("consumer :%s" % n); r = '200 OK'
保证每一次的next()/send() 必须只有一个yield,如果后面没有yield,有其他的逻辑,那么使用next()/send(),会报StopIteration错误。
yield python_python yield详解相关推荐
- yield的用法详解
版权声明:本文为CSDN博主「冯爽朗」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明. 原文链接:https://blog.csdn.net/mieleizhi0 ...
- python协程系列(三)——yield from原理详解
声明:本文将详细讲解python协程的实现机理,为了彻底的弄明白它到底是怎么一回事,鉴于篇幅较长,将彻底从最简单的yield说起从最简单的生成器开始说起,因为很多看到这样一句话的时候很懵,即" ...
- python中yield的用法详解——最简单,最清晰的解释(转载)
首先,如果你还没有对yield有个初步分认识,那么你先把yield看做"return",这个是直观的,它首先是个return,普通的return是什么意思,就是在程序中返回某个值, ...
- python中 yield 的用法详解——最简单,最清晰的解释(排序节省内存消耗)
首先我要吐槽一下,看程序的过程中遇见了yield这个关键字,然后百度的时候,发现没有一个能简单的让我懂的,讲起来真TM的都是头头是道,什么参数,什么传递的,还口口声声说自己的教程是最简单的,最浅显易懂 ...
- python中yield的使用_python中yield的用法详解-转载
原文链接:https://blog.csdn.net/mieleizhi0522/article/details/82142856 ,今天在写python爬虫的时候,循环的时候用到了yield,于是搜 ...
- Python中yield的用法详解——最简单,最清晰的解释
yield关键字的使用 当函数中遇到yield关键字,类似于return代码会直接返回 当函数中使用yield关键字返回,那么在多此next中,从第二次开始,代码会从上一次结束的位置开始运行 首先,如 ...
- IEnumerator/ IEnumerable/ yield return/ StartCoroutine 详解
Update逻辑 IEnumerator/ IEnumerable public interface IEnumerable { IEnumerator GetEnumerator(); } publ ...
- input python_python input 详解
解决问题: input 得到的数据到底是什么类型 多个参数接收input的输入,是怎么解包的 如果输入的个数不确定,怎么处理 要判断输入的是不是float 类型 要对输入的参数格式输出,规定参数只能是 ...
- scatter python_Python scatter详解
函数原型:matplotlib.pyplot.scatter(x, y, s=None, c=None, marker=None, cmap=None, norm=None,vmin=None, vm ...
最新文章
- c++ RTTI(运行时类型识别)
- linux线程函数大全
- C++ delete 和 delete []的区别
- OAF页面查找数据源
- 全球及中国洗衣粉市场消费调查与营销策略分析报告2022版
- TeamCity构建依赖项
- bigquery 教程_bigquery挑战实验室教程从数据中获取见解
- [html] 字体图标加载出来成了小方块,是什么原因呢?如何解决?
- The Illustrated Transformer (Transformer可视化解读自译笔记)
- 编码 GBK 的不可映射字符
- java 判断是否整数倍_java怎样实现判断一个最高达1000位数字的整数是不是3的倍数。...
- webpack+Vue2.0项目基础工程文件配置
- VSCode 拓展插件推荐
- InstallShield安装与部署
- XCode7 iOS8.X Simulator 离线下载地址
- 腾云忆想技术干货|TSF微服务治理实战系列(一)——治理蓝图
- PCB设计中如何进行统一批量检测并生成错误报告
- 当笑神姜涛遇上尼古拉斯赵四,低俗加上恶俗的结果是否就是封杀?
- Non-decreasing Array
- python核心编程电子书_Python核心编程 PDF 超清第3版
热门文章
- 阿尔法贝塔阀原理_α是阿尔法,β是贝塔,那接下去呢?
- E3闪光比Progskeet哪一个是更好地降级PS3的3.70到3.55固件
- SAP-IDOC 知识详解-概述
- 《Total Commander:万能文件管理器》——第10章.中文相关问题
- 将北斗卫星授时(GPS时钟系统)技术应用数据采集系统
- 大话设计模式(8)模板方法模式
- 2022-2-23 Leetcode 47.全排列 II
- P3353 在你窗外闪耀的星星(前缀和)
- 2021-09-03剑指Offer51.数组中的逆序对
- 2021年中国可再生能源行业发展现状分析,政策利好行业快速发展「图」