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
挺好的。
很想吐槽下,我查內地的網站的這個關鍵字的解釋,給出的代碼實例就把我繞暈了,而且拆開來看徹底沒有必要給那麼複雜的代碼事例。
相關文章
相關標籤/搜索