Python 生成器函式

2022-03-22 02:17:54 字數 1177 閱讀 8361

生成器函式:包含yield語句的函式;

生成器物件:生成器物件和迭代器物件行為相似,都支援可迭代介面:__next__(),若想執行生成器函式內部語句,則需要迭代協議』

a、生成器函式被呼叫時,並不會執行函式內部語句,而是返回乙個生成器物件;

b、每執行一條語句,返回對應的乙個yield數值,雖然函式被yield臨時返回了數值,但保留了程式執行的狀態,即在此執行g.__next__()時,則繼續執行函式語句,並返回第二個yield對應的數值;當執行完所有的yield返回值後,程式丟擲停止迭代異常:stopiterstion;這種行為和迭代器一樣,實現了迭代器的介面。

def

f():

print('

in f(), 1')

yield 1

print('

in f(), 2')

yield 2

print('

in f(), 3')

yield 3g =f()

print

(g)#

輸出:,是乙個生成器物件;

print(g.__next__

())#

輸出:in f(), 1

1print(g.__next__

())#

輸出:in f(), 2

2print(g.__next__

())#

輸出:in f(), 3

3print(g.__next__

())#

輸出:stopiteration

c、生成器物件也是乙個可迭代的物件,即它可以放在for迴圈中in的後面,則說明生成器物件實現了__iter__()方法,返回了其自身;

for x in

g:

print

(x)#

輸出:in f(), 1

1in f(), 2

2in f(), 3

3

d、生成器物件即實現了迭代器介面(__next__()),又實現了可迭代介面(__iter__()),返回其自身;

print(g.__iter__() is g)

# 輸出 true

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

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

python 生成器函式

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

python函式 生成器

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