python中yield用法
阿新 • • 發佈:2019-02-17
yield在函式中的功能類似於return,不同的是yield每次返回結果之後函式並沒有退出,而是每次遇到yield關鍵字後返回相應結果,並保留函式當前的執行狀態,等待下一次的呼叫。如果一個函式需要多次迴圈執行一個動作,並且每次執行的結果都是需要的,這種場景很適合使用yield實現。
包含yield的函式成為一個生成器,生成器同時也是一個迭代器,支援通過next方法獲取下一個值。
yield基本使用:
def func():
for i in range(0,3):
yield i
f = func()
f.next()
f.next()
對於生成器,當呼叫函式next時,將獲取生成器yield後邊表示式的值;
當執行完最後一次迴圈後,結束yield語句,生成器會丟擲StopIteration異常;
除了next函式,生成器還支援send函式。該函式可以向生成器傳遞引數。
def func(n):
for i in range(0,n):
val = yield i
print val
f = func(10)
f.next()
#f.send(None)
f.send(2)
f.send(10)
print f.next()