python -yield理解
参考:https://foofish.net/iterators-vs-generators.html
从网上看到一个面试题,求最后的输出结果:
def add(n, i):
return n+i
def test():
for i in range(4):
yield i
g = test() for n in [1, 10, 5]:
g=(add(n, i) for i in g)
print(list(g)) 输出结果:
[1, 2, 3, 4]
[]
[]
list数据类型强转也可以读取生成器的值,第一次循环n=1的时候 生成器g已经被读取了一遍,所以后面
# n =10,n=5的时候生成器不能再被读取 就出现了空的list []
t = test()
for n in [1, 10, 5]:
t = (add(n, i) for i in t)
print(list(t))
输出结果:
[15, 16, 17, 18]
n=1, t = (add(n, i) for i in t) 若取生成器值应为[1,2,3,4]
n=10, t = (add(n, i) for i in (add(n, i) for i in t)),若取值应为[20,21,22,23]
n=5, t=(add(n, i) for i in (add(n, i) for i in (add(n, i) for i in t))),若取值[15, 16, 17, 18] test()因为函数里面没有return,而是yield 生成器对象,表示test()是一个生成器,g=test()并不会立即执行,
只有当它被隐示或者显示的调用next时才能真正执行test()里面的代码;
生成器的值只能被读取一次;
注意:以上均是自己的个人理解,有问题请指教。
python -yield理解的更多相关文章
- python yield 理解
在别人的代码中看到yield这个关键字,看了几篇资料,说一下个人理解. 包含yield 关键字的函数成为一个迭代器,yield跟return的位置一样,只不过每次返回结果后,并没有退出,而是等待下一次 ...
- python yield 理解与用法
1.一句话快速理解 yield 等于 return 这么简单理解 2.详细说明: yield和return的关系和区别了,带yield的函数是一个生成器,而不是一个函数了 这个生成器有一个函数就是n ...
- python迭代器、生成器、yield理解
简介 yield关键字是python的一种高阶用法,使用yield的函数会返回一个生成器对象,生成器又是一个迭代器,与迭代器相类似的则是可迭代对象,下面首先介绍一下迭代器吧. 迭代器 在python中 ...
- Python yield与实现
Python yield与实现 yield的功能类似于return,但是不同之处在于它返回的是生成器. 生成器 生成器是通过一个或多个yield表达式构成的函数,每一个生成器都是一个迭代器(但是迭 ...
- python yield && scrapy yield
title: python yield && scrapy yield date: 2020-03-17 16:00:00 categories: python tags: 语法 yi ...
- 【转】Python yield 使用浅析
转载地址: www.ibm.com/developerworks/cn/opensource/os-cn-python-yield/ Python yield 使用浅析 初学 Python 的开发者经 ...
- Python yield 使用浅析(转)
Python yield 使用浅析 初学 Python 的开发者经常会发现很多 Python 函数中用到了 yield 关键字,然而,带有 yield 的函数执行流程却和普通函数不一样,yield 到 ...
- python yield from 语法
python yield from 语法 yield语法比较简单, 教程也很多 , yield from的中文讲解很少 , python官网是这样解释的 PEP 380 adds the yield ...
- python yield用法 (tornado, coroutine)
yield关键字用来定义生成器(Generator),其具体功能是可以当return使用,从函数里返回一个值,不同之处是用yield返回之后,可以让函数从上回yield返回的地点继续执行.也就是说,y ...
随机推荐
- (59)Wangdao.com第十天_JavaScript 对象在 栈和堆
对象的属性值 如果要使用特殊的属性名,需 对象["属性名"] = 属性值 // 存 对象["属性名"] // 取 obj["1 ...
- vscode插件安装失败的解决方案
在vscode中点击对应插件的install按钮安装,安装失败,软件提示手动安装(manually install). 手动下载vsix安装包,然后点击install from VSIX...,选择v ...
- 锋利的jquery 事件 动画
事件 $(function){} bind(type, [data],function) 事件类型, 传递参数, 处理函数 hover(enter, leave) 光标停留时,函数enter,离开时函 ...
- js文档就绪函数
$(function(){ //执行的内容 }): $().ready(function(){ //执行的内容 }); $(document).ready(function(){ //执行的内容 }) ...
- java.util中,util是什么意思
Util是utiliy的缩写,是一个多功能.基于工具的包. java.util是包含集合框架.遗留的 collection 类.事件模型.日期和时间设施.国际化和各种实用工具类(字符串标记生成器.随机 ...
- Ubuntu16.04 创建和使用虚拟环境
1. 虚拟环境 虚拟环境(virtual environment),顾名思义是虚拟出来的环境,通俗来讲,可以借助虚拟机,docker来理解虚拟环境,就是把一部分内容独立出来,我们把这部分独立出来的 ...
- Ultimate Guide to WeChat for Business 2019
Ultimate Guide to WeChat for Business 2019 By Iaroslav Kudritskiy (source :https://rocketbots.io/blo ...
- java script基本数据类型与数组
基本数据类型 1.undefined (var a;) 2.null (var a=null); 3.String (var a=" " or ' '); 4.boolea ...
- NodeJS笔记(四) NPM 指令--- npm start
在上一节中使用我们使用下面的指令启动了Express的demo APP项目 npm start 这个指令具体执行了哪些内容呢? Node.js新版本改变了启动方式,npm start 会执行 bi ...
- TZOJ 4493: Remove Digits
4493: Remove Digits 时间限制(普通/Java):1000MS/3000MS 内存限制:65536KByte 总提交: 329 测试通过:77 描述 G ...