揭开yield关键字的神秘面纱
2018-07-24 11:24 _天枢 阅读(435) 评论(0) 编辑 收藏 举报写在前言
经常会看见,python函数中带有yield关键字,那么yield是什么,有什么作用?
答案:可以理解yield是一个生成器;
作用:遇到yield关键字,函数会直接返回yield值,相当于return;不同的是下次调用的时候会从yield之后的代码开始执行。
生成器是什么?
是可以迭代的,但是你 只可以读取它一次 ,因为它并不把所有的值放在内存中,它是实时地生成数据:
有人可能会说,我直接迭代,遍历多好,为什么要用生成器,然后去遍历生成器,这多麻烦。
那么你要了解,list列表,所有数据是存储在内存中的。如果数据量非常大,会非常耗内存。
yield是一个特殊的return?
不同的是执行过程中遇到yield关键字,会阻断,yield 返回的是一个生成器。
第一次迭代中你的函数会执行,从开始到达 yield
关键字,然后返回 yield
后的值作为第一次迭代的返回值.
然后,每次执行这个函数都会继续执行你在函数内部定义的那个循环的下一次,再返回那个值,直到没有可以返回的。
注意,当函数中出现yield,该函数返回的就是一个生成器。不在是普通函数。
def func(num):
n,a,b = 0,0,1
while num > n:
yield b #阻断,返回b
a,b = b,a + b
n+=1
for i in func(19): #func(19)是一个生成器,生成器只有调用时执行一次。所以这里用循环
print i
除了for循环取值,你也可以通过next()来取下一个值。
t = func(19)
t.next()
作 者:
天枢
出 处:
http://www.cnblogs.com/yhleng/
关于作者:专注于软件自动化测试领域。如有问题或建议,请多多赐教!
版权声明:本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文链接。
特此声明:所有评论和私信都会在第一时间回复。也欢迎园子的大大们指正错误,共同进步。或者
直接私信我
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角
【
推荐】
一下。您的鼓励是作者坚持原创和持续写作的最大动力!