91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Python3中return和yield的區別是什么

發布時間:2022-06-08 09:30:33 來源:億速云 閱讀:139 作者:zzz 欄目:開發技術

這篇文章主要講解了“Python3中return和yield的區別是什么”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“Python3中return和yield的區別是什么”吧!

    一、前言

    return一直中,每中語言中其沒沒有很大差別,就不多說了。(shell語言return的是退出狀態,可能差別是比較大的)最早看到yield應該是哪們語言用來調整什么線程優先級的,記不清了,不過那里的yield和python中的yield應該功能有區別。

    二、return和yield的異同

    共同點:return和yield都用來返回值;在一次性地返回所有值場景中return和yield的作用是一樣的。

    不同點:如果要返回的數據是通過for等循環生成的迭代器類型數據(如列表、元組),return只能在循環外部一次性地返回,yeild則可以在循環內部逐個元素返回。下邊我們舉例說明這個不同點。

    三、實例說明

    1 return版本

    示例代碼如下:

    class TestYield:
        def gen_iterator(self):
            result_list = []
            for j in range(3):
                print(f"gen_iterator-{j}")
                result_list.append(j)
            # return在循環的外部,待變量完全生成后一次性返回
            return result_list
    
        def call_gen_iterator(self):
            # 執行下邊這句后result_list直接是完成的結果[0,1,2]
            result_list = self.gen_iterator()
            for i in result_list:
                print(f"call_gen_iterator-{i}")
    
    if __name__ == "__main__":
        obj = TestYield()
        obj.call_gen_iterator()

    執行結果如下,可以看到一次性執行完下層函數,生成完整的迭代器類型返回值result_list,一次性返回給上層函數:

    Python3中return和yield的區別是什么

    2 yield版本

    示例代碼如下:

    class TestYield:
        def gen_iterator(self):
            for j in range(3):
                print(f"do_something-{j}")
                # yield在for循環內部
                yield j
    
        def call_gen_iterator(self):
            # yield并不是直接返回[0,1,2],執行下邊這句后result_list什么值都沒有
            result_list = self.gen_iterator()
            # i每請求一個數據,才會觸發gen_iterator生成一個數據
            for i in result_list:
                print(f"call_gen_iterator-{i}")
    
    if __name__ == "__main__":
        obj = TestYield()
        obj.call_gen_iterator()

    執行結果如下,可以看到上下層函數是交替進行的,即上層函數請求迭代一個值下層函數才生成一個值并立即返回這個值:

    Python3中return和yield的區別是什么

    3 yield的意義

    從上邊兩個小節可以看到,雖然return和yield兩者執行的順序有區別,但整個要做的事情是一樣的,所以使用yield并不會比return快,甚至我們可以猜測由于yield總發生上下文切換在速度上還會慢一些,所以速度不是yield的意義。

    他們的主要區別是yiled要迭代到哪個元素那個元素才即時地生成,而return要用一個中間變量result_list保存返回值,當result_list的長度很長且每個組成元素內容很大時將會耗費比較大的內存,此時yield相對return才有優勢。

    四、yield和return嵌套使用

    class TestYield:
        def gen_iterator(self):
            for j in range(3):
                print(f"do_something-{j}")
                # yield在for循環內部
                yield j
    
        def gen_iterator_middle(self):
            print(f"gen_iterator_middle")
            # 返回的是迭代器的句柄,所以加一層return不影響是可以理解的
            return self.gen_iterator()
    
        def call_gen_iterator(self):
            # yield并不是直接返回[0,1,2],執行下邊這句后result_list什么值都沒有
            result_list = self.gen_iterator_middle()
            # i每請求一個數據,才會觸發gen_iterator生成一個數據
            for i in result_list:
                print(f"call_gen_iterator-{i}")
    
    if __name__ == "__main__":
        obj = TestYield()
        obj.call_gen_iterator()

    Python3中return和yield的區別是什么

    感謝各位的閱讀,以上就是“Python3中return和yield的區別是什么”的內容了,經過本文的學習后,相信大家對Python3中return和yield的區別是什么這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!

    向AI問一下細節

    免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

    AI

    神木县| 哈尔滨市| 望谟县| 麻城市| 新邵县| 锦屏县| 西平县| 荆州市| 辉县市| 宁海县| 平遥县| 江都市| 津南区| 苍溪县| 常熟市| 腾冲县| 蛟河市| 双牌县| 炉霍县| 长海县| 富平县| 景谷| 金湖县| 潜江市| 云安县| 贵阳市| 龙里县| 宁陕县| 都匀市| 双流县| 甘孜县| 鲁山县| 济宁市| 普宁市| 太仓市| 沈阳市| 灵台县| 黄冈市| 区。| 伊春市| 左贡县|