日期:20170925
python中有乙個很有趣的東東,叫生成器。
我們先來看看簡單的**,
**1,
#!/usr/bin/python3
defmygenerator
():for n in range(1, 4)
yield n
return
"done"
print(mygenerator)
print
num=mygenerator()
print(num)
print(next(num))
print(next(num))
print(next(num))
執行2,
[penx@ali01 python3]$ ./example_generator.py
mygenerator at 0x7fa4e9cf2578>
mygenerator at 0x7f4639a27730>12
3[penx@ali01 python3]$
python中,定義生成器和定義普通函式差不多,只是內部多了yield。
yield和return的用法差不多,後面接乙個返回物件。上面**就是在乙個for中用yield分別返回1,2,3。
當然,如果和return一樣的話,就沒必要用yield,對不對?後面慢慢解釋。
定義完乙個生成器,我們需要建立它的例項才可以用。num=mygenerator()
之後,我們需要把生成器的例項放入next()中,獲取下乙個值。**中連續呼叫了3次next(num),3次分別獲取num的值1,2,3。
這裡,我們就可以表面理解「生成器」的意思,
生成器是一種可以不斷獲取下乙個值的東東(物件)。
解析
其實yield不難理解,
next()取第乙個值時,生成器函式就會執行。
遇到乙個yield後,就會返回,這裡可以選擇返回乙個值。和return很像。
但之後再next乙個值,生成器函式並沒有像普通函式那樣重頭執行,而是在上一次yield那裡開始執行。這就是生成器的機關。
生成器yield的剖析,
python生成器筆記
生成器 自動實現了迭代器協議 物件必須提供乙個next方法,執行改方法要麼返回迭代中的下一項,要麼就引起乙個stopiteration的異常,以終止迭代 只能往後走不能往前進 第一種形式 idter i for i in range 10 idter為乙個生成器,有next 方法,idter.nex...
python筆記 生成器
python筆記 生成器 好記性不如爛筆頭,學習從摘抄開始!1.通過列表生成式 列表推導式 我們可以直接建立乙個 列表。但是,受到記憶體限制,列表容量肯定是有限的。2.建立乙個包含100萬個元素的列表,不僅占用很大的儲存空間,3.如果我們僅僅需要訪問前面幾個元素,那後面絕大多數元素占用的空間都白白浪...
Python生成器筆記
python中三大器有迭代器,生成器,裝飾器,本文主要講述生成器。主要從生成器的概念,本質,以及yield關鍵字的使用執行過程。本質 生成器是一類特殊的迭代器,使用了yield關鍵字的函式不再是函式,而是生成器。使用了yield的函式就是生成器 1.yield關鍵字有兩點作用 1.1 yield語句...