python 生成器方法

2021-08-10 03:11:27 字數 2518 閱讀 1481

生成器支援close()方法,throw()方法,send()方法

1.close()方法:呼叫不用引數,手動關閉生成器函式,後面的呼叫會直接返回stopiteration異常。

def

g4():

yield

1yield

2yield

3g=g4()

print g.next() #1

g.close()

print g.next() #關閉後,yield 2和yield 3語句將不再起作用;並且返回乙個 stopiteration 異常

2.throw 方法

用來向生成器函式送入乙個異常,可以結束系統定義的異常,或者自定義的異常。throw()後直接跑出異常並結束程式,或者消耗掉乙個yield,或者在沒有下乙個yield的時候直接進行到程式的結尾。

def

gen():

while

true:

try:

yield

'normal value'

yield

'normal value 2'

print('here')

except valueerror:

print('we got valueerror here')

except typeerror:

break

g=gen()

print(next(g))

print(g.throw(valueerror))

print(next(g))

print(g.throw(typeerror))

結果

normal

value

we got valueerror here

normal

value

normal

value

2traceback (most recent call last):

file "h.py", line

15, in

print(g.throw(typeerror))

stopiteration

1.print(next(g)):會輸出normal value,並停留在yield 『normal value 2』之前。

2.由於執行了g.throw(valueerror),所以會跳過所有後續的try語句,也就是說yield 『normal value 2』不會被執行,然後進入到except語句,列印出we got valueerror here。然後再次進入到while語句部分,消耗乙個yield,所以會輸出normal value。

3.print(next(g)),會執行yield 『normal value 2』語句,並停留在執行完該語句後的位置。

4.g.throw(typeerror):會跳出try語句,從而print(『here』)不會被執行,然後執行break語句,跳出while迴圈,然後到達程式結尾,所以跑出stopiteration異常。

3.send()方法

生成器函式最大的特點是可以接受外部傳入的乙個變數,並根據變數內容計算結果後返回。

def

gen():

value=0

while

true:

receive=yield value

if receive=='e':

break

value = 'got: %s' % receive

g=gen()

print(g.send(none))

print(g.send('aaa'))

print(g.send(3))

print(g.send('e'))

流程:

1通過g.send(none)或者next(g)可以啟動生成器函式,並執行到第乙個yield語句結束的位置。此時,執行完了yield語句,但是沒有給receive賦值。yield value會輸出初始值0注意:在啟動生成器函式時只能send(none),如果試圖輸入其它的值都會得到錯誤提示資訊。

2.通過g.send(『aaa』),會傳入aaa,並賦值給receive,然後計算出value的值,並回到while頭部,執行yield value語句有停止。此時yield value會輸出」got: aaa」,然後掛起。

3.通過g.send(3),會重複第2步,最後輸出結果為」got: 3″

4.當我們g.send(『e』)時,程式會執行break然後推出迴圈,最後整個函式執行完畢,所以會得到stopiteration異常。

結果

got: aaa

got:

3traceback (most recent call last):

file "h.py", line 14, in

print(g.send('e'))

stopiteration

python 生成器作用 Python生成器

生成器介紹 在函式內部包含yield關鍵字,那麼該函式執行的結果是生成器,生成器就是迭代器。生成器的功能 把函式結果做成迭代器 以一種優雅的方式封裝好iter,next 提供了一種自己定義迭代器的方式。使用生成器建立乙個迭代器 def a print a yield 11 使用yield,執行後返回...

python生成器好處 Python生成器筆記

python中三大器有迭代器,生成器,裝飾器,本文主要講述生成器。主要從生成器的概念,本質,以及yield關鍵字的使用執行過程。本質 生成器是一類特殊的迭代器,使用了yield關鍵字的函式不再是函式,而是生成器。使用了yield的函式就是生成器 1.yield關鍵字有兩點作用 1.1 yield語句...

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

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