了解 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中文网其他相关文章!