定義:按照某種演算法,邊迴圈邊計算推算出乙個列表中的所有元素;
優點:受記憶體限制,列表容量是有限的,通過生成器,可以不斷按演算法推算出後續的元素,而不是把list的所有元素儲存在記憶體中,從而實現記憶體的節約;
建立乙個生成器:
1、把列表生成式[ ] 改成()
例:
l = [x ** 2 for x in range(10)](l)g = (x ** 2 for x in range(10))
(type(g))
(next(g))
(next(g))
(next(g))
(next(g))
print(next(g))
[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]'generator
'>014
916
上面**中l的型別是乙個list,而g是乙個generator;我們可以直接通過print(l)列印出列表中的所有元素,但要列印generator型別的可以通過next( )函式來獲得下乙個返回值,但generator也是乙個可迭代物件,是可迭代物件就可以通過for迴圈來遍歷。
l = [x ** 2 for x in range(10)](l)g = (x ** 2 for x in range(10))
print(type(g))
for i ing :
print(i)
[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]'generator
'>014
9162536
4964
81
當然基於複雜的推算,用列表生成式無法實現可以用函式來實現,定義generator的另一種方式:乙個函式中包含yield關鍵字,那麼這個函式就不在是乙個普通函式,它是乙個generator,如下圖所示:
deffunc (n):
i,a =0,1
while i print
(a) a = a+2i += 1
deffunc_y (n):
i,a =0,1
while i yield
a a = a+2i += 1
if__name__ =='
__main__':
d = func_y(10)
for i in
d :
print(i)
135791113
1517
19
上圖中函式func( )與func_y( )唯一的不同就是func( )函式中的print(a)變成了func_y( )中的yield a,func_y( )是乙個生成器,那麼就是乙個可迭代物件,可以通過for來迴圈print(i)。所以在python中,可以很簡單的把列表生成式的[ ]改成( )來改成generator,也可以通過更改函式中yield關鍵字來實現定義乙個generator。
python之生成器
使用生成器表示式取代列表解析可以同時節省cpu 和 記憶體 ram 如果你構造乙個列表的目的僅僅是傳遞給別的函式,比如 傳遞給tuple 或者set 用生成器表示式替代吧 def ord map a string for c in a string yield ord c gen ord map u...
python之生成器
先來介紹下迭代器 迭代器即迭代取值的工具 迭代 的意思就是重複的基於上一次的結果取值 迭代器可以不依賴索引取值 取值 取乙個值就會少乙個,取完了,還取值就會報錯 1.什麼是生成器 在函式內但凡出現yield關鍵字,在呼叫函式就不會執行函式內 會返回乙個迭代器物件的值,該值稱之為生成器 強調 生成器的...
Python之生成器
通過列表生成式,我們可以產生列表,但是列表容量肯定有限,如果建立乙個很大的列表元素,要占用大量的記憶體空間,如果我們只要列表前面的元素,則後面的儲存空間大大浪費,這時候我們需要引出python生成器,這樣就必要建立完整的列表,從而大大節省空間,我們稱之為 generator.建立生成器方法一 使用 ...