Python 中的迭代器是实现迭代器协议的对象,它由两个方法组成: __iter__() 和 __next__()
迭代器__iter__() 方法返回迭代器对象本身,并在循环开始时调用一次。__next__() 方法从迭代器返回下一个值。当没有更多要返回的值时,它会引发 StopIteration 异常。Python 中的大多数内置容器(如列表、元组、字典和集合)都是可迭代对象,可以使用该 iter() 函数转换为迭代器。
my_list = [1, 2, 3]my_iter = iter(my_list)print(next(my_iter)) # Output: 1print(next(my_iter)) # Output: 2# and so on自定义迭代器:您可以通过使用 __iter__() 和 __next__() 方法定义类来创建自定义迭代器。
Python 中的生成器生成器是使用函数而不是类创建迭代器的更简单方法。它们像常规函数一样编写, yield 但使用语句一次返回一个值,在值生成的最后一个点左右暂停和恢复其执行和状态。
生成器yield 使用语句:生成器不是一次返回所有值(就像带有 return 语句的函数一样),而是一次返回一个值。每次在生成器上调用时 next() ,执行都会从最后一个 yield 语句开始恢复。生成器函数:生成器函数的定义与普通函数类似,但每当它需要生成值时,它都会使用 yield 关键字而不是 return .def my_generator(): yield 1 yield 2 yield 3gen = my_generator()print(next(gen)) # Output: 1print(next(gen)) # Output: 2# and so on生成器的优点内存效率:它们允许您声明一个行为类似于迭代器的函数,即它可以在 for 循环中使用。惰性计算:生成器动态计算值,因此不需要一次存储所有值。这使得它们特别适用于大型数据集、无限序列和管道。