Python高階用法之yield關鍵字
阿新 • • 發佈:2018-12-14
很多blog裡面說,yield關鍵字和return關鍵字非常類似。只不過yield關鍵字更復雜一點。
我們都知道,return就是返回一個值,一般位於函式的末尾(或者說,作為函式結束的標誌)。只要函式執行到return,那麼這個函式的這次呼叫就結束了。
yield並不是這樣。首先,yield返回的不是一個值,而是迭代器。yield返回值之後,並不代表函式的這次呼叫結束,函式會接著執行yield下面的程式碼。
def yt(): yield 0 print("yield's tail") def rt(): return 1 print("return's tail") if __name__ == '__main__': for i in yt(): print(i) print(rt())
我們無法直接打印出yield關鍵字返回的值,因為帶有yield關鍵字的函式就是一個生成器。所以需要結合for迴圈來使用。我們可以看看輸出:
0
yield's tail
1
輸出如上,螢幕上打印出了"yield's tail"這串字元,證明yield結束後,函式仍然向下執行。相比而言,return的函式並沒有向下執行列印"return's tail"。這就是yield關鍵字的一個特性。
我們可以進一步加深對yield的理解,通過以下程式碼:
def yield_test(n): for i in range(n): yield i * 2 print("\nend.") for j in yield_test(5): print(j, end=' ')
在這裡,完全把yield生成器的功能發揮出來了。可以看看輸出:
0 2 4 6 8
end.