yeild关键字的理解
来源:互联网 发布:易奇八字准不准知乎 编辑:程序博客网 时间:2024/06/05 20:40
yeild关键字的理解
结合 Python yield 使用浅析 文章 与彻底理解Python中的yield
以后有理解了在补充
带有 yield 的函数在 Python 中被称之为 generator(生成器)
1.求Fibonacci数列
def fab(max): n,a,b = 0, 0, 1 while n < max: print b a, b = b, a + b n = n + 1
执行结果
11235
该函数有两大缺点
- 函数无返回值。一般函数是需要返回值,以便其他函数调用
- 就是因为没有返回值,该函数的复用性较低
2.改进一:返回一个列表
def fab(max): n,a,b = 0, 0, 1 list = [] while n < max: lsit.append(b) a, b = b, a + b n = n + 1 return list
该函数的缺点
- 满足可复用,但是会随着元素的数目增加,列表无限增大,很快消耗掉内存
3.改进二:返回一个生成器
生成器就要将函数写成一个支持iterable的类,如下
class Fab(Object): def __init__(self, max): self.max = max self.n, self.a, self.b = 0, 0, 1 def __iter__(self): return self def next(self): if self.n < self.max: r = self.b self.a, self.b = self.b, self.a + self.b return r raise StopIteration()
执行结果
fa.next()1fa.next()1fa.next()2fa.next()3fa.next()5fa.next()StopIteration......
函数的缺点
- 函数虽然实现了迭代器的功能,但是不够简洁
4.改进三:使用yeild关键字返回一个生成器
def fab(max): n,a,b = 0, 0, 1 while n < max: yeild b a, b = b, a + b n = n + 1
执行结果
for n in fab(5): print n11235
此时fab返回的是一个generator对象,放在for循环中进行迭代,n 就是取其中的元素(通过迭代器自由的next()方法)
5. 实例理解yeild操作
#encoding:UTF-8 def yield_test(n): for i in range(n): yield call(i) print("i=",i) #做一些其它的事情 print("do something.") print("end.") def call(i): return i*2
执行结果
####[252] 表示notebook的编辑器代码行数[252]f = yeild_test(5)[253]f.next() 0 [254]f.next() ('i=',0) 2[255]f.next() ('i=',1) 4[256]f.next() ('i=',2) 6[257]f.next() ('i=',3) 8[258]f.next() ('i='4) do something. end.
说明执行迭代碰到yeild则会中断,返回一个值,下次迭代时再执行yeild后面的代码。
阅读全文
0 0
- yeild关键字的理解
- python生成器 yeild关键字
- Java线程之yeild()理解
- python的yeild
- Thread.Sleep(0) vs Sleep(1) vs Yeild 经典(虽然是C#的,但是有助于理解java的)
- es6的箭头函数,function* , yeild详解
- 认识 python 的 yeild 和 generator
- synchornized关键字的理解
- final 关键字的理解
- typedef关键字的理解
- Synchronized 关键字的理解
- volatile关键字的理解
- static关键字的理解
- volatile关键字的理解
- finally关键字的理解
- 几个关键字的理解
- synchronized关键字的理解
- new 关键字的理解
- 早早早
- 如果使用AJAX
- sql
- Java volatile 理解
- SQL 查询的列中截取一部分字符串作为新列
- yeild关键字的理解
- Linux笔记(3)-求助指令man和info
- oracle的一个定时执行任务(job定时执行存储过程)
- Spring-HelloWorld
- Eclipse使用Ctrl+C和Ctrl+V复制粘贴时总是卡顿
- 关于是否要从游戏测试行业跳出来的思考
- div的一些样式属性--第四天
- PHP7下安装event扩展
- 图像处理-opencv去水印(如有图片侵权,请及时联系)