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中文網其他相關文章!