一、解释
在 Python 中,迭代是指逐个访问容器(如列表、元组、集合、字典等)中的元素。为了实现迭代,我们需要使用可迭代对象和迭代器。
可迭代对象(Iterable):具有 iter() 方法的对象被称为可迭代对象。这个方法返回一个迭代器。
迭代器(Iterator):具有 iter() 和 next() 方法的对象被称为迭代器。iter() 方法返回迭代器对象本身,而 next() 方法用于返回迭代序列中的下一个元素。
下面是一个简单的示例,展示了如何使用可迭代对象和迭代器:
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
# 当没有更多元素时,会引发 StopIteration 异常
print(next(my_iter)) # 引发 StopIteration 异常
在上面的示例中,我们首先使用 iter() 函数将可迭代对象 my_list 转换为迭代器 my_iter。然后,我们使用 next() 函数逐个访问迭代器中的元素。当没有更多元素可用时,next() 函数会引发 StopIteration 异常来表示迭代结束。
另外,我们也可以使用 for 循环来遍历可迭代对象,而不需要显式地调用 next() 函数:
my_list = [1, 2, 3] # 可迭代对象
# 使用 for 循环遍历可迭代对象
for item in my_list:
print(item)
for 循环会自动创建一个迭代器并逐个访问可迭代对象中的元素,无需我们手动处理迭代器的创建和 next() 方法的调用。
二、示例
class MyIterator:
def __init__(self, data):
self.data = data
self.index = 0
def __iter__(self):
return self
def __next__(self):
if self.index >= len(self.data):
raise StopIteration
element = self.data[self.index]
self.index += 1
return element
# 创建可迭代对象
my_list = [1, 2, 3]
my_iter = MyIterator(my_list)
# 使用 for 循环遍历可迭代对象
for item in my_iter:
print(item)
在上面的示例中,MyIterator 类实现了迭代器的功能。它的 iter() 方法返回 self,即迭代器本身。next() 方法根据当前的索引值返回相应的元素,并将索引值递增。当索引值超过列表的长度时,它引发 StopIteration 异常。