python中yeild的用法

應用場景:爲了減少數據存儲,利用yeild構建生成器,與next配合使用,數據用多少,讀多少,不需要一次性將所有的數據讀進來。
與return的聯繫與區別聯繫:都有返回函數值的功能。
區別:yield是一個生成器,生成器中由函數next(),next可以接着上次yield運行的地方,繼續運行下面的函數。
目標:yield語句延遲了語句的執行,然後發送了一個值給調用者,但保留了一定的狀態去保證函數離開之後可以繼續。當繼續的時候,函數繼續執行上一個的運行狀態。
示例代碼1:


def foo():

    print("starting...")

    while True:

        res = yield 4

        print("res:",res)

g = foo()

print(next(g))

print("*"*20)

print(g.send(7))

輸出結果:

starting...
4
********************
res: 7
4

到這裏你可能就明白yield和return的關係和區別了,帶yield的函數是一個生成器,而不是一個函數了,這個生成器有一個函數就是next函數,next就相當於“下一步”生成哪個數,這一次的next開始的地方是接着上一次的next停止的地方執行的,所以調用next的時候,生成器並不會從foo函數的開始執行,只是接着上一步停止的地方開始,然後遇到yield後,return出要生成的數,此步就結束。

參考鏈接:
https://blog.csdn.net/mieleizhi0522/article/details/82142856

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章