當前位置:
首頁 > 知識 > 「python」生成器的高級應用send、close和throw方法

「python」生成器的高級應用send、close和throw方法

#send
def gen_func():
# 這樣寫有兩個作用1. 可以產出值, 2. 可以接收值(調用方傳遞進來的值)
html = yield "http://projectsedu.com" #這樣寫的話就是接收值
print(html)
yield 1
yield 2
return "bobby"
#1. 生成器不只可以產出值,還可以接收值
#流程是,調用的產出yield值,
#下一次調用send的值會到變數,html裡面
if __name__ == "__main__":
gen = gen_func()
#首次,在調用send發送非none值之前,我們必須啟動一次生成器, 方式有兩種1. gen.send(None), 2. next(gen)
url = gen.send(None)
#download url
html = "bobby"
print(gen.send(html)) #send方法可以傳遞值進入生成器內部,同時還可以重啟生成器執行到下一個yield位置
print(gen.send(html))
#1.啟動生成器方式有兩種, next(), send
# print(next(gen))
# print(next(gen))
# print(next(gen))
# print(next(gen))
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
# close
def gen_func():
yield "http://projectsedu.com"
yield 2
yield 3
return "bobby"
if __name__ == "__main__":
gen = gen_func()
print(next(gen))
gen.close()
#print(next(gen)) #生成器close掉之後,在調用next方法,就會拋異常
print("bobby")
1
2
3
4
5
6
7
8
9
10
11
12
13
14
# throw
def gen_func():
#1. 可以產出值, 2. 可以接收值(調用方傳遞進來的值)
try:
yield "http://projectsedu.com"
except Exception as e:
pass
yield 2
yield 3
return "bobby"
if __name__ == "__main__":
gen = gen_func()
print(next(gen))
gen.throw(Exception, "download error") #這個異常是扔到 yield "http://projectsedu.com"裡面的,雖然他以及執行過。yield 2會跳過
print(next(gen))
gen.throw(Exception, "download error")

「python」生成器的高級應用send、close和throw方法

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 程序員小新人學習 的精彩文章:

簡單非同步處理
一個等效ping的EOS智能合約

TAG:程序員小新人學習 |