生成器支援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 語句的函式,就是生成器函式,呼叫後返...