python 生成器函式

2021-08-07 22:23:26 字數 1181 閱讀 3796

python 函式的定義體中有 yield 關鍵字, 該函式就是生成器函式。 呼叫生成器函式時, 會返回乙個生成器物件。生成器函式的定義體執行完畢後, 生成器物件會丟擲stopiteration 異常。

def gen_a():

print('start')

yield 1

print('starting')

yield 2

print('starting')

yield 3

print('end')

>>> it = iter(gen_a())

>>> next(it)

start

1>>> next(it)

starting

2>>> next(it)

starting

3>>> next(it)

endtraceback (most recent call last):

file "", line 1, in stopiteration

>>>

>>> for i in gen_a():

... print(i)

...

start

1starting

2starting

3end

這裡清楚地顯示了生成器的執行過程

for迴圈第一次呼叫next(),列印出start,生成器函式定義體中的yield語句,返回生成值1 

for迴圈第二次呼叫next(),由yield 1 前進到 yield 2 列印出starting,生成器函式定義體中的yield語句,返回生成值2

for迴圈第三次呼叫next(),由yield 2 前進到 yield 3 列印出starting,生成器函式定義體中的yield語句,返回生成值3

for迴圈第四次呼叫next(),列印出end,到達函式定義體的末尾, 導致生成器物件丟擲 stopiteration 異常。for機制捕獲異常, 因此迴圈終止時沒有報錯。

生成器函式會建立乙個生成器物件, 包裝生成器函式的定義體。 把生成器傳給 next(...) 函式時, 生成器函式會向前, 執行函式定義體中的下乙個 yield 語句, 返回產出的值, 並在函式定義體的當前位置暫停。 最終, 函式的定義體返回時, 外層的生成器物件會丟擲stopiteration 異常——這一點與迭代器協議一致

python生成器函式 Python 生成器函式

一 生成器 生成器指的是生成器物件,可由生成器表示式得到,也可使用 yield 關鍵字得到乙個生成器函式,呼叫這個函式得到乙個生成器物件 生成器物件,是乙個可迭代物件,是乙個迭代器 生成器物件,是延遲計算 惰性求值的 1.1 生成器函式 函式體重包含 yield 語句的函式,就是生成器函式,呼叫後返...

python函式 生成器

1.生成器 是乙個特殊的迭代器 迭代的抽象層級更高 所以,擁有迭代器的特性,惰性計算資料,節省記憶體。能夠記錄下狀態,並通過next 函式,訪問下乙個狀態。具備可迭代性。但是,如果打造乙個自己的迭代器,比較複雜,需要實現很多方法 在後續的面相物件程式設計中會講解 所以,就有乙個更加優雅的方式 生成器...

Python 生成器函式

生成器函式 包含yield語句的函式 生成器物件 生成器物件和迭代器物件行為相似,都支援可迭代介面 next 若想執行生成器函式內部語句,則需要迭代協議 a 生成器函式被呼叫時,並不會執行函式內部語句,而是返回乙個生成器物件 b 每執行一條語句,返回對應的乙個yield數值,雖然函式被yield臨時...