写在前言python
常常会看见,python函数中带有yield关键字,那么yield是什么,有什么做用?函数
答案:能够理解yield是一个生成器; spa
做用:遇到yield关键字,函数会直接返回yield值,至关于return;不一样的是下次调用的时候会从yield以后的代码开始执行。code
生成器是什么?blog
是能够迭代的,可是你 只能够读取它一次 ,由于它并不把全部的值放在内存中,它是实时地生成数据:内存
有人可能会说,我直接迭代,遍历多好,为何要用生成器,而后去遍历生成器,这多麻烦。it
那么你要了解,list列表,全部数据是存储在内存中的。若是数据量很是大,会很是耗内存。for循环
yield是一个特殊的return?class
不一样的是执行过程当中遇到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()