yield
是一个类似 return
的关键字,只是这个函数返回的是个生成器。
>>> def createGenerator() :
... mylist = range(3)
... for i in mylist :
... yield i*i
...
>>> mygenerator = createGenerator() # create a generator
>>> print(mygenerator) # mygenerator is an object!
<generator object createGenerator at 0xb7555c34>
>>> for i in mygenerator:
... print(i)
0
1
4
作者:NearTan
链接:http://www.jianshu.com/p/84e66ced656f
來源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
这个例子没什么用途,但是它让你知道,这个函数会返回一大批你只需要读一次的值.
为了精通 yield
,你必须要理解:当你调用这个函数的时候,函数内部的代码并不立马执行 ,这个函数只是返回一个生成器对象,这有点蹊跷不是吗。那么,函数内的代码什么时候执行呢?当你使用for
进行迭代的时候.
现在到了关键点了!
第一次迭代中你的函数会执行,从开始到达 yield
关键字,然后返回yield
后的值作为第一次迭代的返回值. 然后,每次执行这个函数都会继续执行你在函数内部定义的那个循环的下一次,再返回那个值,直到没有可以返回的。
如果生成器内部没有定义 yield
关键字,那么这个生成器被认为成空的。这种情况可能因为是循环进行没了,或者是没有满足if/else
条件。