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進行迭代的時候,執行函式內的程式碼