# -*- 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详解相关推荐

  1. yield的用法详解

    版权声明:本文为CSDN博主「冯爽朗」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明. 原文链接:https://blog.csdn.net/mieleizhi0 ...

  2. python协程系列(三)——yield from原理详解

    声明:本文将详细讲解python协程的实现机理,为了彻底的弄明白它到底是怎么一回事,鉴于篇幅较长,将彻底从最简单的yield说起从最简单的生成器开始说起,因为很多看到这样一句话的时候很懵,即" ...

  3. python中yield的用法详解——最简单,最清晰的解释(转载)

    首先,如果你还没有对yield有个初步分认识,那么你先把yield看做"return",这个是直观的,它首先是个return,普通的return是什么意思,就是在程序中返回某个值, ...

  4. python中 yield 的用法详解——最简单,最清晰的解释(排序节省内存消耗)

    首先我要吐槽一下,看程序的过程中遇见了yield这个关键字,然后百度的时候,发现没有一个能简单的让我懂的,讲起来真TM的都是头头是道,什么参数,什么传递的,还口口声声说自己的教程是最简单的,最浅显易懂 ...

  5. python中yield的使用_python中yield的用法详解-转载

    原文链接:https://blog.csdn.net/mieleizhi0522/article/details/82142856 ,今天在写python爬虫的时候,循环的时候用到了yield,于是搜 ...

  6. Python中yield的用法详解——最简单,最清晰的解释

    yield关键字的使用 当函数中遇到yield关键字,类似于return代码会直接返回 当函数中使用yield关键字返回,那么在多此next中,从第二次开始,代码会从上一次结束的位置开始运行 首先,如 ...

  7. IEnumerator/ IEnumerable/ yield return/ StartCoroutine 详解

    Update逻辑 IEnumerator/ IEnumerable public interface IEnumerable { IEnumerator GetEnumerator(); } publ ...

  8. input python_python input 详解

    解决问题: input 得到的数据到底是什么类型 多个参数接收input的输入,是怎么解包的 如果输入的个数不确定,怎么处理 要判断输入的是不是float 类型 要对输入的参数格式输出,规定参数只能是 ...

  9. scatter python_Python scatter详解

    函数原型:matplotlib.pyplot.scatter(x, y, s=None, c=None, marker=None, cmap=None, norm=None,vmin=None, vm ...

最新文章

  1. c++ RTTI(运行时类型识别)
  2. linux线程函数大全
  3. C++ delete 和 delete []的区别
  4. OAF页面查找数据源
  5. 全球及中国洗衣粉市场消费调查与营销策略分析报告2022版
  6. TeamCity构建依赖项
  7. bigquery 教程_bigquery挑战实验室教程从数据中获取见解
  8. [html] 字体图标加载出来成了小方块,是什么原因呢?如何解决?
  9. The Illustrated Transformer (Transformer可视化解读自译笔记)
  10. 编码 GBK 的不可映射字符
  11. java 判断是否整数倍_java怎样实现判断一个最高达1000位数字的整数是不是3的倍数。...
  12. webpack+Vue2.0项目基础工程文件配置
  13. VSCode 拓展插件推荐
  14. InstallShield安装与部署
  15. XCode7 iOS8.X Simulator 离线下载地址
  16. 腾云忆想技术干货|TSF微服务治理实战系列(一)——治理蓝图
  17. PCB设计中如何进行统一批量检测并生成错误报告
  18. 当笑神姜涛遇上尼古拉斯赵四,低俗加上恶俗的结果是否就是封杀?
  19. Non-decreasing Array
  20. python核心编程电子书_Python核心编程 PDF 超清第3版

热门文章

  1. 阿尔法贝塔阀原理_α是阿尔法,β是贝塔,那接下去呢?
  2. E3闪光比Progskeet哪一个是更好地降级PS3的3.70到3.55固件
  3. SAP-IDOC 知识详解-概述
  4. 《Total Commander:万能文件管理器》——第10章.中文相关问题
  5. 将北斗卫星授时(GPS时钟系统)技术应用数据采集系统
  6. 大话设计模式(8)模板方法模式
  7. 2022-2-23 Leetcode 47.全排列 II
  8. P3353 在你窗外闪耀的星星(前缀和)
  9. 2021-09-03剑指Offer51.数组中的逆序对
  10. 2021年中国可再生能源行业发展现状分析,政策利好行业快速发展「图」