代码改变世界

揭开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()