首页 >后端开发 >Python教程 >Python 的 `yield` 关键字如何创建和管理生成器?

Python 的 `yield` 关键字如何创建和管理生成器?

DDD
DDD原创
2024-12-21 08:51:09516浏览

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