python yield 关键字

  最近看代码看到python里面的yield关键字,和我以前接触的语言好像都没有来着,我就查了查它的含义,大概理解以下:python

>>> 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

 

    1.它和return差很少的用法,只是最后是返回了一个生成器。
    2.了解yield 必须知道,当你调用yield所在的那个函数的时候,那个函数并无运行,只会返回一个生成器的对象。
    3.当你第一次在for中调用生成器的的对象,它将会运行你函数中的代码从最开始一直到到碰到了yield的关键字,而后它会返回循环中的第一个值。而后每一次其余的调用将会运行你在这个函数中所写的循环多一次,而且返回下一个值,知道没有值能够返回了。
生成器能够认为是空的,若是这个函数运行可是没有运行到yield上。这也许是由于循环的结束,也许是由于你没有写一个安全的if/else。
这里又涉及到生成器的问题:
    生成器和迭代器差很少,可是它只能运行一次,由于它不是把值存在内存中,而是直接运行生成值,因此我理解应该是定义的时候须要代码块的。
 
>>> mygenerator = (x*x for x in range(3))
>>> for i in mygenerator: ... print(i) 0 1 4 >>> for i in mygenerator: ... print(i)

 

再运行一次for就不会打印出来东西了。

固然 上面的理解来自于:
http://stackoverflow.com/questions/231767/what-does-the-yield-keyword-do-in-python
挺好的。
很想吐槽下,我查内地的网站的这个关键字的解释,给出的代码实例就把我绕晕了,而且拆开来看彻底没有必要给那么复杂的代码事例。
相关文章
相关标签/搜索