1. 程式人生 > >python中yield用法

python中yield用法

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()