首页 >后端开发 >Python教程 >Python 中的迭代器与生成器:何时使用哪个?

Python 中的迭代器与生成器:何时使用哪个?

Linda Hamilton
Linda Hamilton原创
2024-11-25 19:16:11670浏览

Iterators vs. Generators in Python: When to Use Which?

Python 中的生成器与迭代器

Python 的迭代器和生成器都是可迭代的,但它们的实现和使用有所不同

迭代器

迭代器是可迭代对象,提供用于遍历项目序列的接口。它们有两个主要方法:

  • __iter__:返回迭代器本身,允许其迭代多次。
  • __next__:返回序列中的下一项。当没有更多项目时引发 StopIteration。

生成器

生成器是一种特殊类型的迭代器,它使用yield 关键字动态生成值。调用时,生成器函数返回一个可以迭代的生成器对象。

在内部,生成器存储一个挂起的执行状态,用于跟踪迭代中的当前位置。当迭代生成器时, __next__ 方法恢复挂起的函数并生成下一个值。然后再次暂停执行,直到下一次迭代。

用例

  • 使用迭代器:

    • 当您需要跨迭代维护状态时(例如,带有复杂行为)。
    • 当您需要公开除迭代之外的其他方法时(例如,具有 current() 和 next() 方法的类)。
  • 使用生成器:

    • 当简单性和效率都重要时优先级。
    • 当您想要延迟生成值而不存储中间列表时。
    • 当您想要暂停和恢复迭代时(例如,暂停计算以供稍后使用)使用)。

示例

考虑以下为给定范围生成平方数的函数:

def squares(start, stop):
    for i in range(start, stop):
        yield i * i

该函数创建一个生成器,一次生成一个平方数。它比列表理解或自定义迭代器更有效,因为它避免创建所有平方值的中间列表。

以上是Python 中的迭代器与生成器:何时使用哪个?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn