Python 中 Yield 和 Return 的區別?


在 Python 中,生成器的定義是藉助yield語句完成的。因此,在我們深入瞭解yield的具體作用之前,瞭解生成器的概況非常重要。如果您熟悉 Python,那麼很有可能您之前已經使用過 Python 生成器。生成器在 Python 中發揮著重要的作用。在 Python 中,可以使用生成器生成迭代器,但此過程採用略有不同的形式。

Python 生成器是可以動態暫停和恢復併產生一系列結果的函式。它們還可以用於生成隨機數。在 Python 2.2 中,生成器首次作為可選功能引入。在 Python 2.3 中,它們成為強制性的。儘管 Python 2.5 中的生成器函式已經具備足夠強大的功能,但它們的功能得到了極大的改進。

為了保持向後相容性,在 Python 2.2 中新增生成器導致引入了一個名為“yield”的新關鍵字。為了使用生成器,我們需要從_future_模組匯入它們。當生成器在 Python 版本 2.3 中成為預設值時,這一點發生了改變,以反映出此更改不再需要。

yield語句可以暫時停止函式的執行,然後向呼叫者返回一個值,同時儲存函式的狀態以供以後恢復。這意味著在獲得返回值後,整個生成器仍然可以重新啟動。return 語句用於終止函式的執行,它也向呼叫函式的人返回一個值。如果缺少,則您的函式將不返回任何內容。

什麼是 Python Yield?

在 Python 生成器中,yield語句取代函式的return,以便將值傳遞迴呼叫生成器的人,而不會刪除任何區域性變數。為了更好地理解yield語句在 Python 程式設計中執行的功能,您首先需要熟悉生成器

生成器函式和普通函式的區別在於,生成器函式在其定義中包含“yield”語句。這以“yield”關鍵字開頭,它標識要返回給呼叫此函式的人的生成器物件。

在 Python 中,一種稱為“生成器”的特定型別的函式,它不是將資料值返回給呼叫函式的人,而是返回另一個生成器物件。由於yield關鍵字,可以暫時停止函式的執行,儲存狀態,並在以後恢復函式。

示例

請看下面的例子 -

# Use of yield def printresult(String): for i in String: if i == "p": yield i # Initializing string String = "Happy Birthday" ans = 0 print ("The number of 'p' in word is: ", end = "" ) String = String.strip() for j in printresult(String): ans = ans + 1 print (ans)

輸出

The number of 'p' in word is: 2

什麼是 Python Return?

yield語句相反,return語句導致函式終止,同時將值傳遞迴呼叫它的函式。更具過程性的函式不會顯式地向其呼叫者返回任何內容,而是返回一個值,該值會發送回呼叫函式。儘管一個函式可以有多個 return 語句,但每次呼叫這些語句中的每一個時,只能呼叫其中一個。

幾乎總是,return語句將放置在函式塊的末尾,其目的是返回執行該函式內包含的所有語句的最終結果。但是,return語句也可能出現在函式塊的前面,以停止執行該塊中的所有後續語句。如果用於停止函式的執行,則情況將如此。這會導致程式在呼叫方處立即重新啟動執行。“None”返回物件型別是在 Python 中沒有為return物件提供值時的等效型別。

示例

以下示例顯示了在 Python 中使用return -

# Show return statement class Test: def __init__(self): self.str = "Happy Birthday" self.x = "Pradeep" # This function returns an object of Test def fun(): return Test() # Driver code to test above method t = fun() print(t.str) print(t.x)

輸出

Happy Birthday
Pradeep

Python 中 Yield 和 Return 的區別

下表重點介紹了 Python 中 Yield 和 Return 的主要區別 -

比較依據 Yield Return
基礎 在大多數情況下,您將需要使用 yield 函式才能將典型的 Python 函式轉換為生成器。 在大多數情況下,使用 return 關鍵字來表示執行的結束,它將結果“返回”給呼叫它的語句。
功能 它取代函式的 return,以便暫停函式的執行,而不會丟失任何區域性變數。 它退出函式並將值返回給其呼叫者。
用途 當生成器向呼叫者提供中間結果時,呼叫者將使用此函式。 當函式準備好傳遞值時,需要使用此函式。
執行 yield 語句之後的程式碼在後續的函式呼叫中執行。 而 return 語句之後的程式碼將不會執行。
編譯 它能夠多次執行。 它一次只能執行一次。

結論

yield語句產生一個生成器物件,並且可以在不終止程式的情況下向呼叫者返回多個值,而return語句用於從函式內部向呼叫者返回一個值,並且它會終止程式。return 語句用於從函式內部向呼叫者返回該值。

更新於: 2022年9月10日

10K+ 瀏覽量

開啟您的 職業生涯

透過完成課程獲得認證

開始學習
廣告

© . All rights reserved.