1. 程式人生 > >Python中yield解析

Python中yield解析

turn font body creat create ret sed list 特點

小探yield

查看 python yield 文檔

yield expressions:
Using a yield expression in a function’s body causes that function to be a generator
can only be used in the body of a function definition

翻譯成人話就是:
使用yield表達式會將函數體變成生成器,而且只能在函數定義的主體中使用。

叠代對象

我一般使用的 for * in array(list, string,file) 。這些都是可叠代對象
這樣的方法 所有的數據都在內存中,如果數據量特別大的時候,會消耗大量的內存

就像在python2常使用 for i in xrange(num) 來代替 for i in range(num)

yield類似於return關鍵字,yield函數會生成一個generator。

  • 特點:叠代一次遇到yield時返回yield後面(右邊)的值,下一次叠代時,從上一次叠代遇到的yield後面的代碼(下一行)開始執行。

生成器generator也是可以進行叠代,但是只能讀取一次,它並不把所有的值都放在內存中,實時地生成數據。

使用方法是重復調用next()方法,直至catch一個異常error

yield運行

一個實例

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

當你調用這個函數的時候,函數內部的代碼並不是立即執行。函數只返回一個生成器對象。當使用for進行叠代的時候,函數內部的代碼執行。

python yield 參考鏈接

Python中yield解析