首頁 >後端開發 >Python教學 >Python 的「yield」關鍵字如何在生成器函數中建立高效的迭代器?

Python 的「yield」關鍵字如何在生成器函數中建立高效的迭代器?

Barbara Streisand
Barbara Streisand原創
2024-12-25 17:44:10248瀏覽

How Does Python's `yield` Keyword Create Efficient Iterators in Generator Functions?

Python 中的「yield」關鍵字有什麼作用?

Python 的「yield」關鍵字用在產生器函數中,生成器函數是特殊函數充當迭代器。

生成器函數與迭代器

  • 迭代器:一次產生一系列值的物件。
  • 生成器函數:傳回迭代器而不是特定值的函數。他們使用“yield”關鍵字按需產生值。

「yield」的功能

當呼叫產生器函數時:

  • 生成器函數不會立即執行其代碼。
  • 相反,它會傳回一個生成器物件。
  • 這個生成器物件是生成值的迭代器。

當迭代器用於'for' 迴圈時:

  • 迴圈第一次遇到「yield」語句時,產生器函數會恢復執行並產生第一個值。
  • 循環的後續迭代會導致生成器函數恢復並產生下一個值,直到沒有更多值為止。
  • 生成器函數在到達其邏輯末尾時終止或遇到「return」語句。

範例程式碼說明

給定的程式碼片段在節點類別中定義了一個名為 _get_child_candidates 的產生器函數。

  • 函數採用參數 distance、min_dist 和 max_dist。
  • 如果左子節點和右子節點的距離滿足criteria。
  • 如果沒有更多子級滿足條件,則生成器函數終止。

在呼叫者程式碼中:

  • 結果初始化為空list.
  • candidates 被初始化為包含目前節點的列表物件。
  • 循環迭代候選對象。
  • 對於每個節點,它檢查距離,如果滿足條件,則將其值加到結果中。
  • 然後擴充候選物件與從 _get_child_candidates 生成器獲得的子節點。
  • 循環繼續,直到所有子節點都已完成

產生器的好處

  • 記憶體效率:與清單不同,生成器不會將所有值儲存在記憶體中。
  • 惰性計算:僅在迭代產生器時才計算值,從而減少計算量開銷。
  • 對迭代的進階控制:您可以使用生成器函數中的邏輯控制值的產生。

以上是Python 的「yield」關鍵字如何在生成器函數中建立高效的迭代器?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn