了解 Python 中的 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 模組提供了操作可迭代物件的函數。例如,您可以輕鬆建立清單的排列。
以上是Python 的 `yield` 關鍵字如何建立和管理生成器?的詳細內容。更多資訊請關注PHP中文網其他相關文章!