博客
关于我
python之彻底搞懂迭代、可迭代、迭代器的区别(五)
阅读量:701 次
发布时间:2019-03-16

本文共 1070 字,大约阅读时间需要 3 分钟。

yield from从容器中取值

yield from从容器中取值,容器包含生成器,也就是说yield from让一个生成器将其部分操作委派给另外一个生成器。

def reverse(x):    while x-1>=0:        yield x-1        x -=1def list_number(x):    yield from range(x)    yield from range(x-1, -1, -1)    yield from reverse(x)for i in list_number(3):    print(i,end=',')out:0,1,2,2,1,0,2,1,0,

关于send方法的案例

def count():  # 子生成器,将yield传来的数字累加,若传来的值为None,则返回累加结果    result = 0    while 1:        x = yield        if x is None:            return result        result += xdef count_list(x):  # 父生成器,将累加任务委托给子生成器    while 1:        y = yield from count()        x.append(y)plus_list = []cal = count_list(plus_list)next(cal)  # 使生成器可以接收传入值for i in range(1, 5):    cal.send(i)cal.send(None)  # 实际收到None的是count函数,结束累加for i in range(1, 11):    cal.send(i)cal.send(None)  # 结束第二次累加print(plus_list)  # 输出最终结果out:[10, 55]

send方法两个注意点

  1. send方法要配合yield语句使用。
  2. send方法可以给yield传值,但yield尚未产生断点时传值会报错,所以先要对生成器执行一次next,然后才能正常传值。

深入理解send和yield from机制

send和yield from配合可以在调用者和生成器之间形成透明的双向数据通道,包括从生成器获取数据以及向生成器传送数据。

要更加深入理解send和yield机制需要学习和理解协程相关的知识点。留待日后梳理协程知识点时再细讲send和yield from。

转载地址:http://tnrqz.baihongyu.com/

你可能感兴趣的文章
NodeJs学习笔记002--npm常用命令详解
查看>>
nodejs学习笔记一——nodejs安装
查看>>
vue3+Element-plus icon图标无法显示的问题(已解决)
查看>>
NodeJS实现跨域的方法( 4种 )
查看>>
nodejs封装http请求
查看>>
nodejs常用组件
查看>>
nodejs开发公众号报错 40164,白名单配置找不到,竟然是这个原因
查看>>
Nodejs异步回调的处理方法总结
查看>>
NodeJS报错 Fatal error: ENOSPC: System limit for number of file watchers reached, watch ‘...path...‘
查看>>
nodejs支持ssi实现include shtml页面
查看>>
Nodejs教程09:实现一个带接口请求的简单服务器
查看>>
nodejs服务端实现post请求
查看>>
nodejs框架,原理,组件,核心,跟npm和vue的关系
查看>>
Nodejs概览: 思维导图、核心技术、应用场景
查看>>
nodejs模块——fs模块
查看>>
Nodejs模块、自定义模块、CommonJs的概念和使用
查看>>
nodejs生成多层目录和生成文件的通用方法
查看>>
nodejs端口被占用原因及解决方案
查看>>
Nodejs简介以及Windows上安装Nodejs
查看>>