在 Python3 中,迭代器是一种可以逐个访问集合元素的对象,它实现了迭代协议(Iterator Protocol),即该对象必须具有 __iter__()
和 __next__()
方法。
__iter__()
方法返回迭代器对象本身。__next__()
方法返回下一个元素。
当没有更多的元素时,__next__()
方法应引发 StopIteration 异常。
注意事项:
- 迭代器只能单向移动,不能往回跳。
- 在 for 循环中,Python 会自动处理 StopIteration 异常,因此我们不需要显式地捕获和处理该异常。
下面是一个使用 Python3 迭代器的例子,该例子定义了一个 Fibonacci 数列的迭代器:
class Fib: def __init__(self, max): self.max = max def __iter__(self): self.a = 0 self.b = 1 return self def __next__(self): fib = self.a if fib > self.max: raise StopIteration self.a, self.b = self.b, self.a + self.b return fib # 使用 Fibonacci 数列迭代器打印前 10 个数 fib = Fib(100) for i in fib: print(i)
上面的例子中,我们定义了一个名为 Fib
的类,并实现了迭代器协议。在 __iter__()
方法中,我们初始化了两个变量 self.a
和 self.b
,并返回了迭代器对象本身。在 __next__()
方法中,我们计算了 Fibonacci 数列中的下一个元素,如果超过了指定的最大值,则引发 StopIteration 异常。
接着,我们使用 for 循环遍历 Fibonacci 数列的前 10 个元素,并打印每个元素的值。注意,在这个例子中,我们没有显式地捕获 StopIteration 异常,因为 Python 会自动处理该异常。
ython3 中的迭代器是一种实现了迭代协议(Iterator Protocol)的对象,它可以通过 __iter__()
和 __next__()
方法来实现逐个访问集合元素的功能。迭代器的运行原理如下:
-
创建迭代器对象:使用一个可迭代对象创建迭代器对象,通常可以使用
iter()
函数来实现。 -
初始化迭代器对象:在迭代器对象中初始化相关参数,例如记录当前迭代位置、长度等信息。
-
返回迭代器对象本身:在
__iter__()
方法中返回迭代器对象本身。 -
访问下一个元素:在
__next__()
方法中计算出下一个元素,并返回该元素的值。 -
引发 StopIteration 异常:当没有更多的元素时,引发 StopIteration 异常。
下面是一个简单的例子,演示了 Python3 中迭代器的运行原理:
# 创建可迭代对象 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 异常
在上面的例子中,我们首先创建了一个可迭代对象 my_list
,并使用 iter()
函数获取了该对象的迭代器对象 my_iter
。接着,我们使用 next()
函数依次访问了 my_iter
中的三个元素,并打印了每个元素的值。最后,由于没有更多的元素可供访问,next()
函数抛出了 StopIteration 异常。