何時在Python中使用yield而不是return?


簡而言之,無論何時程式控制到達return語句,程式執行都會終止,其餘語句將不會執行。

然而,對於yield,無論何時程式控制到達yield語句,程式執行都會暫停,稍後我們可以繼續函式中的其他語句。

讓我們詳細瞭解這兩個語句。

Yield

在函式中使用yield語句會使該函式成為一個生成器函式,可用於迴圈中。當函式正在執行且yield語句執行時,yield之後的value將傳遞迴呼叫它的迴圈。下次迴圈迭代時,函式將從yield語句之後立即開始。

def func():
   yield 1
   yield 2
   yield 3

for num in func():
   print(num * num)

輸出

1
4
9

在上面的程式中,呼叫該函式的迴圈將在func函式完成時完成——要麼到達函式的末尾(func()),要麼到達return語句。

但是,任何使用相同生成器函式的新迴圈都將從頭開始執行該函式。

Return

return語句:

  • 用於停止函式的執行,並可選擇向呼叫者返回值。具有return(但沒有yield)的函式不能在迴圈中使用(與上面的yield不同)。

  • 如果再次呼叫先前已執行的函式,則函式將從頭開始執行(與上面的yield不同)。

何時使用return或yield?

當我們想要迭代一個序列但由於資源限制或只是不想將整個序列儲存在記憶體中時,建議使用yield。對於其他情況,我們可以考慮使用return語句。

讓我們看另一個使用yield語句生成整數平方數的程式。

def Square():
   i = 1;
   # An Infinite loop to generate squares
   while True:
      yield i*i
      i += 1 # Next execution resumes from this point
for num in Square():
   if num > 100:
      break
   print(num)

輸出

1
4
9
16
25
36
49
64
81
100

通常不在try…finally塊的try子句中使用yield語句,因為不能保證生成器會恢復,因此不能保證finally塊會執行。

更新於:2019年7月30日

932 次瀏覽

啟動您的職業生涯

透過完成課程獲得認證

開始
廣告
© . All rights reserved.