python中和生成器协程相关yield from之最详最强解释,一看就懂(二)
一. 从列表中yield
语法形式:yield from <可迭代的对象实例>
python中的列表是可迭代的, 如果想构造一个生成器逐一产生list中元素,按之前的yield语法,是在生成器内部遍历该list,每一轮用yiled依次产生一个生成的值。
def generator():
for i in range(5):
yield i
return 'done'
采用yiled from语法,可以这样写, 每一个元素均用yield生成一个值, 是不是更简单 !
def generator():
yield from range(5)
return 'done'
二. 使用子生成器
语法形式:yield from <子生成器>
生成器永远是一个迭代器,所以也可迭代的对象,因此 yield from后面可以直接跟生成器,比如下面的proxgen, 将直接根据subgen的生成值逐一产生一个同样的生成值
subgen = generator()
def proxygen():
yield from subgen:
三. 获取子生成器返回值
语法形式:rt = yield from 子生成器
subgen = generator()
def proxygen():
t = yield from subgen:
print(t)
这里需要特别注意的是, 在子生成器subgen未执行完成(也就是没有自然终结或者return返回)之前,yield from前面的赋值语句是不会被执行的,只有子生成器全部执行完成后,此时subgen通过return返回的值就是yield from subgen的返回值'done',这个变量t才真正被赋值为'done'. 完整代码如下:
def generator():
yield from range(5)
return 'done' def proxygen():
t = yield from generator()
print(t) for i in proxygen():
print(i)
输出如下:
0
1
2
3
4
done
可以看到,在proxygen中打印的'done',直到所有值都生成并打印完成后,最后才输出。
四. yield from的真正意义
如果只是简单的语法糖式化简,3.3版本后专门搞个新的yield from语法关键字, 似乎有点小题大作。yield from的真正意义非常牛逼,看下回分解
下一篇 : python中和生成器协程相关的yield from之最详最强解释,一看就懂(三)
上一篇: python中和生成器协程相关的yield之最详最强解释,一看就懂(一)
python中和生成器协程相关yield from之最详最强解释,一看就懂(二)的更多相关文章
- python中和生成器协程相关的yield from之最详最强解释,一看就懂(四)
如果认真读过上文的朋友,应该已经明白了yield from实现的底层generator到caller的上传数据通道是什么了.本文重点讲yield from所实现的caller到coroutine的向下 ...
- python中和生成器协程相关的yield之最详最强解释,一看就懂(一)
yield是python中一个非常重要的关键词,所有迭代器都是yield实现的,学习python,如果不把这个yield的意思和用法彻底搞清楚,学习python的生成器,协程和异步io的时候,就会彻底 ...
- python装饰器,迭代器,生成器,协程
python装饰器[1] 首先先明白以下两点 #嵌套函数 def out1(): def inner1(): print(1234) inner1()#当没有加入inner时out()不会打印输出12 ...
- 终结python协程----从yield到actor模型的实现
把应用程序的代码分为多个代码块,正常情况代码自上而下顺序执行.如果代码块A运行过程中,能够切换执行代码块B,又能够从代码块B再切换回去继续执行代码块A,这就实现了协程 我们知道线程的调度(线程上下文切 ...
- Python | 详解Python中的协程,为什么说它的底层是生成器?
今天是Python专题的第26篇文章,我们来聊聊Python当中的协程. 我们曾经在golang关于goroutine的文章当中简单介绍过协程的概念,我们再来简单review一下.协程又称为是微线程, ...
- Python中的协程,为什么说它的底层是生成器?
我们曾经在golang关于goroutine的文章当中简单介绍过 协程 的概念,我们再来简单review一下.协程又称为是微线程,英文名是Coroutine.它和线程一样可以调度,但是不同的是线程的启 ...
- 理解Python协程:从yield/send到yield from再到async/await
Python中的协程大概经历了如下三个阶段:1. 最初的生成器变形yield/send2. 引入@asyncio.coroutine和yield from3. 在最近的Python3.5版本中引入as ...
- Python进阶----异步同步,阻塞非阻塞,线程池(进程池)的异步+回调机制实行并发, 线程队列(Queue, LifoQueue,PriorityQueue), 事件Event,线程的三个状态(就绪,挂起,运行) ,***协程概念,yield模拟并发(有缺陷),Greenlet模块(手动切换),Gevent(协程并发)
Python进阶----异步同步,阻塞非阻塞,线程池(进程池)的异步+回调机制实行并发, 线程队列(Queue, LifoQueue,PriorityQueue), 事件Event,线程的三个状态(就 ...
- [转载]Python 3.5 协程究竟是个啥
http://blog.rainy.im/2016/03/10/how-the-heck-does-async-await-work-in-python-3-5/ [译] Python 3.5 协程究 ...
随机推荐
- (后台)Java:对double值进行四舍五入,保留两位小数的几种方法
mport java.text.DecimalFormat; DecimalFormat df = new DecimalFormat("######0.00"); double ...
- Scrum敏捷开发沉思录
计算机科学的诞生,是世人为了用数字手段解决实际生活中的问题.随着时代的发展,技术的进步,人们对于现实世界中的问题理解越来越深刻,描述也越来越抽象,于是对计算机软件的需求也越来越高,越来越复杂,变化也越 ...
- Django电商项目---完成注册页面和用户登录day1
完成基本的创建项目.用户注册.登录.注销功能 创建Django项目,创建df_user的App 创建静态文件夹static(跟manage.py保持在同一级别下) 复制静态文件(css + image ...
- 【PAT】B1069 微博转发抽奖(20 分)
一开始并没有做出来,关键是没有认真理解题,每次做题之前都应该认真读题,自己把样例模拟一下,防止漏掉信息,减慢自己写代码的速度 此题的重点在于规划逻辑,以及如何储存中奖者,用map最好,否则查找并不方便 ...
- flask框架的教程--虚拟环境的安装[一]
为什么需要安装虚拟环境呢? 因为虚拟环境中扩展包对本机软件中不影响 安装 查看是否安装了虚拟环境 安装虚拟环境的第三方工具 sudo pip install virtualenv sudo pip i ...
- January 19th, 2018 Week 3rd Friday
As iron sharpens iron, so a friend sharpens a friend. 铁磨铁,可以磨砺出刀刃,朋友相交,亦应如此. When making friends wit ...
- 随机生成&部门匹配
整体概况 1.完整程序概况 (1)程序整体构架 (2)生成程序模型 (3)匹配算法模型 (4)生成结果评估 (5)命名规范 (6)先期和后期分工 2.心路历程与对全新的java认识(心得体会篇) (1 ...
- asp.net core 如何集成kindeditor并实现图片上传功能
准备工作 1.visual studio 2015 update3开发环境 2.net core 1.0.1 及以上版本 目录 新建asp.net core web项目 下载kindeditor ...
- Python程序的编写方式
直接在Python的交互式环境编写代码 现在,了解了如何启动和退出Python的交互式环境,我们就可以正式开始编写Python代码了. 在写代码之前,请千万不要用“复制”-“粘贴”把代码从页面粘贴到你 ...
- mysql删除数据左右空格
select trim(字段) from 表 删除左右空格 select ltrim(字段) from 表 删除左空格 select rtrim(字段) from 表 删除右空格