python 關鍵字yield解析

xie仗劍天涯發表於2017-05-24

python 關鍵字yield解析

yield 的作用就是把一個函式變成一個 generator,帶有 yield 的函式不再是一個普通函式,Python 直譯器會將其視為一個 generator。
yield 的好處是顯而易見的,把一個函式改寫為一個 generator 就獲得了迭代能力,比起用類的例項儲存狀態來計算下一個 next() 的值,不僅程式碼簡潔,而且執行流程異常清晰

# eg_v1 建立一個列表,逐項地讀取這個列表,那麼這個列表就是一個可迭代物件。

>>> mylist = [1,2,3,4,5]
>>> for i in mylist:
... print i
... 
1
2
3
4
5

  

使用一個列表生成式來建立一個列表的時候,也是建立了一個可迭代的物件

>>> mylist = [x * x for x in range(5)]
>>> for i in mylist:
... print i
... 
0
1
4
9
16

注:使用 for .. in .. 語法的叫做一個迭代器:列表,字串,檔案等,缺點是記憶體開銷大


生成器
生成器是可以迭代的,但是隻可以讀取它一次 ,因為它並不把所有的值放在記憶體中,它是實時地生成資料。

>>> mygenerator = (x * x for x in range(5))
>>> for i in mygenerator:
... print i
... 
0
1
4
9
16

  

yield關鍵字
yield 是一個類似 return 的關鍵字,只是這個函式返回的是個生成器

>>> def createGenerator():
... mylist = range(5)
... for i in mylist:
... yield i * i
... 
>>> 
>>> mygenerator = createGenerator()
>>> print (mygenerator)
<generator object createGenerator at 0x7fb6f3fdf820>
>>> for i in mygenerator:
... print i
... 
0
1
4
9
16
>>>

可以理解:當你呼叫這個函式的時候,函式內部的程式碼並不立馬執行 ,這個函式只是返回一個生成器物件,使用for進行迭代的時候,執行函式內的程式碼

 

相關文章