在Python中,迭代器(Iterators)用于让对象可以被迭代,它实现了iter()和next()方法。
迭代器有以下主要特点:
- 它包含一个状态,每次调用next()方法时都会修改这个状态。
- 它应该实现iter()和next()方法。iter()返回迭代器本身,next()返回下一个元素。
- 如果迭代器中的所有元素都被访问过,那么再次调用next()会抛出StopIteration异常。
例如,我们可以这样定义一个迭代器:
class Countdown:
def __init__(self, n):
self.n = n
def __iter__(self):
return self
def __next__(self):
if self.n <= 0:
raise StopIteration
self.n -= 1
return self.n
我们可以像列表一样迭代这个迭代器:
for i in Countdown(5):
print(i) # prints 5 4 3 2 1
迭代器也可用于for-in循环,因为for-in循环背后就调用了迭代器。
另外,我们也可以手动调用next()方法来迭代:
iterator = Countdown(5)
print(next(iterator)) # 5
print(next(iterator)) # 4
# ...
print(next(iterator)) # 1
print(next(iterator)) # Raises StopIteration
需要注意的是,迭代器是一种数据访问模式,它并不实际存储任何数据,而是按需生成数据。这使得迭代器在一定程度上可以节省内存。
迭代器模式在Python中应用广泛,许多内置类型都实现了迭代器协议,如:
- 列表.元组:可以被for-in迭代。
- 字典:迭代键。
- 文件对象:迭代行。
- 生成器:是一个特殊的迭代器,使用yield语句。