python中yield
yield用來定義生成器,它可以從函數裏返回一個值,返回之後可以從上次yield返回的地方繼續執行,就是給調用者一個返回值後,可以立即回到原來的位置繼續執行,知道遇到下一個yield語句再返回一個值
1.
def test():
print'yield1'
yield1
print'yield12'
yield2
test()
在有yield的函數,直接調用沒有輸出結果,說明函數沒有被運行
2.
def age(a):
for i in range(a):
yield i
t=age(3)
print t.next()
輸出結果:0
調用next()可以讓函數運行,但因爲只運行了一次所以只輸出一個值,遇到yield後會停止,想繼續執行就要繼續調用next()
def age(a):
for i in range(a):
yield i
t=age(3)
print t.next()
print t.next()
print t.next()
print t.next()
輸出結果:
0
1
2
在運行到第四次時,生成器會報一個StopIteration異常,迭代終止
包含yield語句的函數會被特地編譯成生成器。當函數被調用時,他們返回一個生成器對象,這個對象支持迭代器接口。函數也許會有個return語句,但它的作用是用來yield產生值的。不像一般的函數會生成值後退出,生成器函數在生成值後會自動掛起並暫停他們的執行和狀態,他的本地變量將保存狀態信息,這些信息在函數恢復時將再度有