首頁 >後端開發 >Python教學 >Python 的 `yield` 關鍵字如何建立和管理生成器?

Python 的 `yield` 關鍵字如何建立和管理生成器?

DDD
DDD原創
2024-12-21 08:51:09475瀏覽

How Does Python's `yield` Keyword Create and Manage Generators?

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

簡介

了解 Python 中的 Yield 關鍵字需要熟悉迭代器和生成器。

可迭代

可迭代是像列表和字串這樣的對象,可以一次迭代一個元素。

生成器

生成器是一次產生一個值的迭代器,而不將整個序列儲存在記憶體中。

Yield

yield 關鍵字的作用類似於生成函數中的 return 語句。但是,它並沒有結束該函數,而是暫停執行並傳回一個值。當迭代器恢復時,將從暫停的位置繼續執行。

程式碼解釋

產生器:

def _get_child_candidates(self, distance, min_dist, max_dist):
    # Check if a left child exists and the distance is within range
    if self._leftchild and distance - max_dist < self._median:
        yield self._leftchild

    # Check if a right child exists and the distance is within range
    if self._rightchild and distance + max_dist >= self._median:
        yield self._rightchild

此產生器函數回傳子節點在指定距離內range.

呼叫者:

result, candidates = [], [self]  # Initialize empty result and candidates list

while candidates:  # Iterate while candidates are available
    node = candidates.pop()
    distance = node._get_dist(obj)
    
    if distance <= max_dist and distance >= min_dist:  # Check distance range
        result.extend(node._values)

    candidates.extend(node._get_child_candidates(distance, min_dist, max_dist))  # Add children to candidates list

return result

呼叫者初始化並迭代候選節點列表,使用生成器函數在循環時擴展候選列表。它檢查距離範圍並在適當的情況下添加子節點。

高階產生器使用

yield 關鍵字可以控制產生器耗盡。透過設定停止迭代的標誌,您可以暫停和恢復對生成器值的存取。

Itertools

itertools 模組提供了操作可迭代物件的函數。例如,您可以輕鬆建立清單的排列。

以上是Python 的 `yield` 關鍵字如何建立和管理生成器?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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