程序员文章、书籍推荐和程序员创业信息与资源分享平台

网站首页 > 技术文章 正文

一文掌握Python 中迭代器和生成器的概念

hfteth 2025-01-15 13:36:48 技术文章 13 ℃

迭代器:

  • 迭代器是一个对象,它使我们能够一次遍历或迭代一系列或一系列数据。它遵循迭代器约定,并且涉及通过使用来实现
    __iter__():该方法返回迭代器对象本身。它负责初始化或重建迭代器。__next__():此方法返回序列或系列中的下一个元素。如果没有更多元素,则会引发 StopIteration 异常。
Class Iter():
  def __init__(self, start, end):
      self.cur = start
      self.end = end
  def __iter__(self):
      return self
  def __next__(self):
      if self.cur >= self.end:
         raise StopIteration
      else:
        self. cur += 1
      return self.cur - 1
  my_iter = iterator(1, 5)
  for i in my_iter:
   print(i)

优点:

高效的内存使用:
非常适合处理大型数据集,因为它无需检查或即时生成值。

支持惰性求值:
仅在需要时才生成值。它可以节省更多时间进行不必要的操作。

应用:

  • 逐行读取大文件。
  • 数据库查询结果。
  • 动态生成序列。

生成器:

  • 生成器提供了一种简洁有效的创建迭代器的方法。
  • 它们使用包含yield 语句的特殊类型的函数。
    每当调用生成器函数时,它都会返回一个生成器迭代器,并允许它迭代由yield 语句生成的值。

生成器功能:

使用yield 生成一个值并暂时挂起其状态直到下一次迭代。
自动管理本地状态,使其更易于编写和理解。

def my_gen(start, end):
    cur= start
    while cur < end:
        yield current
    cur += 1
gen = my_gen(1, 5)
for num in gen:
 print(num)
def my_gen(start, end):
    current = start
    while current < end:
        yield current
        current += 1
    print("Generator finished")
gen = my_gen(1, 5)
for num in gen:
 print(num)

优点:

  • 清晰的语法:与手动迭代器实现相比,提供更具可读性和紧凑的语法。
  • 自动状态管理:简化局部变量和状态的处理。

应用:

  • 高效处理大型数据集,无需将其完全加载到内存中。
  • 实施惰性评估。
  • 创建无限的值序列。

因此,迭代器和生成器对于在 Python 中处理序列至关重要。迭代器提供手动控制,而生成器提供更 Pythonic 和简洁的方法,对于涉及大型数据集的场景特别有用。它们之间的选择取决于我们代码的具体要求和复杂性。

Tags:

最近发表
标签列表