python之生成器(generator

2022-06-23 00:00:13 字數 1657 閱讀 8180

定義:按照某種演算法,邊迴圈邊計算推算出乙個列表中的所有元素;

優點:受記憶體限制,列表容量是有限的,通過生成器,可以不斷按演算法推算出後續的元素,而不是把list的所有元素儲存在記憶體中,從而實現記憶體的節約;

建立乙個生成器:

1、把列表生成式[ ] 改成()

例:

l = [x ** 2 for x in range(10)]

print

(l)g = (x ** 2 for x in range(10))

print

(type(g))

print

(next(g))

print

(next(g))

print

(next(g))

print

(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)]

print

(l)g = (x ** 2 for x in range(10))

print(type(g))

for i in

g :

print(i)

[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]

'generator

'>014

9162536

4964

81

當然基於複雜的推算,用列表生成式無法實現可以用函式來實現,定義generator的另一種方式:乙個函式中包含yield關鍵字,那麼這個函式就不在是乙個普通函式,它是乙個generator,如下圖所示: 

def

func (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)

135

791113

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.建立生成器方法一 使用 ...