1. 程式人生 > >Python高階用法之yield關鍵字

Python高階用法之yield關鍵字

很多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.