在Python中,Yield和Return之間的差異是什麼?

PHPz
發布: 2023-09-15 15:37:02
轉載
919 人瀏覽過

在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,以便將值傳回給呼叫產生器的人,而不會刪除任何局部變數。為了更好地理解Python程式設計中yield語句執行的功能,您首先需要熟悉生成器。

生成器函數和普通函數的差別在於生成器函數的定義中有一個「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 語句也可能出現在函數區塊的前面,以停止該區塊中所有後續語句的執行。如果它被用來阻止函數的執行,就會出現這種情況。這會導致呼叫者立即重新啟動程式的執行。當沒有為 return 物件提供任何值時,「None」傳回物件類型與 Python 中的等效。

範例

以下範例展示了 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 中收益率和回報之間的差異

下表突顯了 Python 中的 Yield 和 Return 之間的主要差異 -

比較基礎 產量 返回
基礎 在大多數情況下,您需要使用yield函數將典型的Python函數轉換為生成器。 在大多數情況下,執行的結束是透過使用 return 關鍵字來表示的,該關鍵字將結果「傳回」到呼叫它的語句。
功能 它取代函數的返回,以便暫停函數的執行而不丟失任何局部變數。 它退出函數並向其呼叫者傳回一個值。
使用 當生成器向呼叫者提供中間結果時,呼叫者將使用此函數。 當一個函數準備傳遞一個值時,有必要使用this。
執行 yield語句後編寫的程式碼將在下面的函數呼叫中執行。 雖然return語句之後所寫的程式碼將不會被執行。
編譯 它具有多次運行的能力。 它一次只運行一次。

結論

yield語句產生一個生成器對象,並且可以在不終止程式的情況下向呼叫者返回多個值,而return語句用於向呼叫者傳回一個值從函數內部,它終止程式。 return 語句用來將值從函數內部傳回給呼叫者。

以上是在Python中,Yield和Return之間的差異是什麼?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:tutorialspoint.com
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
最新問題
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!