在Python中,迭代器(iterator)和生成器(generator)是两个重要的概念,用于处理可迭代对象的元素。
迭代器是一个实现了迭代器协议(iterator protocol)的对象。迭代器协议要求对象包含一个特殊的__iter__()
方法和一个__next__()
方法。__iter__()
方法返回迭代器对象自身,__next__()
方法返回可迭代对象的下一个元素。如果没有更多的元素可供迭代,__next__()
方法应该抛出StopIteration
异常。通过迭代器,我们可以逐个访问可迭代对象的元素,而无需提前知道对象中元素的数量。例如,Python中的列表、字符串、字典、文件等都是可迭代对象,我们可以使用迭代器来遍历它们的元素。
my_list = [1, 2, 3]
my_iter = iter(my_list) # 获取迭代器对象
print(next(my_iter)) # 输出:1
print(next(my_iter)) # 输出:2
print(next(my_iter)) # 输出:3
print(next(my_iter)) # 抛出StopIteration异常
生成器是一种特殊的迭代器。生成器可以通过函数来创建,使用yield
关键字来定义每次迭代返回的值。生成器函数在被调用时不会立即执行,而是返回一个生成器对象。每次调用生成器对象的__next__()
方法时,生成器函数会从上次暂停的地方继续执行,直到遇到下一个yield
语句或函数结束。通过生成器,我们可以方便地创建一个简洁高效的迭代器。
def my_generator():
yield 1
yield 2
yield 3
my_gen = my_generator() # 获取生成器对象
print(next(my_gen)) # 输出:1
print(next(my_gen)) # 输出:2
print(next(my_gen)) # 输出:3
print(next(my_gen)) # 抛出StopIteration异常
迭代器和生成器为我们提供了一种便捷的方式来处理大型数据集或无限序列的元素。通过逐个获取元素的方式,我们可以节省内存空间,并且可以在需要的时候按需生成元素,提高程序的效率。