1、yield使用
1)函数中使用yield,可以使函数变成生成器。一个函数如果是生成一个数组,就必须把数据存储在内存中,如果使用生成器,则在调用的时候才生成数据,可以节省内存。
2)生成器方法调用时,不会立即执行。需要调用next()或者使用for循环来执行。使用for循环不需要自己捕获StopIteration异常。使用next()方法,当生产器方法执行结束会抛出StopIteration异常(只要不是使用yield返回数据,都会抛出StopIteration异常)。
示例:

def fib(max):n,a,b = 0,0,1while n < max:yield ba, b = b, a+bn = n + 1return 'done'n = fib(10)
for n1 in n:print(n1)

3)yield不仅可以返回值,也可以接收值。下面面示例为生产消费模式。生产者生产一条记录,消费者消费一条记录。
4)调用生成器send方法传递数据时,必须先调用next(c)或者c.send(None)方法,执行到yield语句,等待接收数据。否则会报错。
以下代码为廖雪峰网站的示例https://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c000/001432090171191d05dae6e129940518d1d6cf6eeaaa969000

def consumer():r = ''while True:n = yield rif not n:returnprint('[CONSUMER] Consuming %s...' % n)r = '200 OK'def produce(c):c.send(None)  # 和next方法一样 获取下一个值,必须先使用None参数调用一次, 执行到yieldn = 0while n < 5:n = n + 1print('[PRODUCER] Producing %s...' % n)r = c.send(n)  # 先发送值给yield语句,再执行到yield语句时返回print('[PRODUCER] Consumer return:%s' % r)c.close()c = consumer()
produce(c)

2、yield from的使用
1)为了让生成器(带yield函数),能简易的在其他函数中直接调用,就产生了yield from。
2)以下代码,htest为生成器,itest通过yield from 直接调用htest。这样itest也变成了一个生成器。创建itest实例不断的去获取数据,当生成器执行结束时,会抛出StopIteration异常。那这个异常是htest抛出的,还是itest抛出的。通过捕获异常,会发现其实是itest抛出异常,htest并不会抛出StopIteration异常。
3)yield from 也可以返回值,通过变量接收。变量接收的值,即htest使用return返回的值。示例代码中,当i==3时,会直接使用return返回,这时val的值就是100;因为htest函数中不是使用yield返回值,所以itest会继续执行print(val)语句。itest代码执行完,然而并没有使用yield返回数据(htest中没有,itest中也没有),所以马上会抛出StopIteration异常)(如果在itest函数最后使用yield返回一个数据,就不会抛出异常)。

def htest():i = 1while i < 4:n = yield iif i == 3:return 100i += 1def itest():val = yield from htest()print(val)t = itest()
t.send(None)
j = 0
while j < 3:j += 1try:t.send(j)except StopIteration as e:print('异常了')

python yield 与 yield from相关推荐

  1. Python中yield和yield from的用法

    yield 后面接的是 future 对象 调用方 委托生成器 yield from 直接给出循环后的结果 yield from 委托者和子生成器直接通信 yield from 直接处理stopIte ...

  2. python yield from yield_python yield和yield from用法总结详解 python yield和yield from用法总结...

    #!/usr/bin/env python # -*- coding: utf-8 -*-from inspect import isgeneratorfunction def fab(max): n ...

  3. Python 生成器 和 yield 关键字

    Python 中 yield 的作用:http://youchen.me/2017/02/10/Python-What-does-yield-do/# Python 生成器详解:http://codi ...

  4. [转载] 【零基础学爬虫】python中的yield详解

    参考链接: 什么时候在Python中使用yield而不是return python中的yield功能比较强大,什么意思呢?如果一个函数f内使用了yield关键词,那么该函数就可以这样使用: for i ...

  5. python yield from_简述 yield 和 yield from

    yield 函数可以看成是一堆指令的集合.在函数中加入yield可以把一个函数变成一个generator,虽然调用的方式不一样了,但是其实现的功能和原来的函数基本是一样的. 而yield在这其中的作用 ...

  6. python协程--yield和yield from

    字典为动词"to yield"给出了两个释义:产出和让步.对于 Python 生成器中的 yield 来说,这两个含义都成立.yield item 这行代码会产出一个值,提供给 n ...

  7. python中的yield使用详解

    yield是python的一个关键字,刚接触python的时候对这个关键字一知半解,掌握之后才发现这关键字有大用,本文将对yield的使用方法好好梳理一番. 1 使用yield创建生成器 在pytho ...

  8. 从yield 到yield from再到python协程

    yield 关键字 def fib():a, b = 0, 1while 1:yield ba, b = b, a+b yield 是在:PEP 255 -- Simple Generators 这个 ...

  9. 深入理解Python中的yield和send

    send方法和next方法唯一的区别是在执行send方法会首先把上一次挂起的yield语句的返回值通过参数设定,从而实现与生成器方法的交互. 但是需要注意,在一个生成器对象没有执行next方法之前,由 ...

  10. 转载:Python 的关键字 yield 有哪些用法和用途?

    原始链接:https://www.zhihu.com/question/345210030/answer/841903171 Python 的关键字 yield 有哪些用法和用途? 飞鸿 人生到处知何 ...

最新文章

  1. 中国电子学会青少年编程能力等级测试图形化四级编程题:抽奖
  2. oracle 闩机制,Oracle latch闩原理示意图
  3. windows下忘记mysql超级管理员密码的解决办法
  4. 第一次上计算机课日记500,第一次上网课作文500字
  5. 微服务架构设计总结实践
  6. 在Docker上部署NGINX和NGINX Plus
  7. OpenShift Security (13) - 利用Log4j漏洞攻击容器
  8. mysql双活存储容量 TB_Mysql双活方案 - osc_fted3syf的个人空间 - OSCHINA - 中文开源技术交流社区...
  9. Python入门--元组的创建,(),tuple()
  10. MySQL查询日期类数据常用函数
  11. c语言转化音乐格式转换器安卓版,音频提取格式转换APP
  12. integnps 数控智能编程v19.3 数控切割机编程 切割机套料编程
  13. 模式识别和机器学习的区别
  14. 如何编写一个好的软件设计文档——Medium中文站
  15. 八皇后——(第一场 递归与回溯)
  16. 一年有四季的c语言编程,一年是否有四季?
  17. STM32F103RB 实作笔记(三)- LED 7 节显示(正点原子 STM32F103 nano开发板)程式解析(上)
  18. 明星开餐饮店,逃不过凉凉的魔咒?
  19. 你知道视频怎么去水印吗?试试这三个方法学会怎么去视频水印
  20. 读javascript高级程序设计09-BOM

热门文章

  1. 做好工作交接对自己多重要,说到心坎了
  2. 微信公众平台开发(六) 翻译功能开发
  3. NTP客户端配置-Windows时间同步设置
  4. Linux Shell中判断进程是否存在的代码
  5. ubuntu 18.04 使用intel核显画面撕裂解决办法
  6. DxO PhotoLab 2.1.2 for Mac精华汉化版 DxO PhotoLab 2.1.2 for Mac中文版
  7. 多人交友+私密相亲,红娘相亲直播源码
  8. js 实现繁体和简体之间的转换
  9. 俄罗斯联邦储蓄银行将采取措施绕开本国加密货币监管
  10. 制作一个简单的新闻客户端