迭代器协议
Python 处理 for 循环时,首先会调用 something.__iter__(),返回 something 对应的迭代器(假设叫 it);而后,for 循环会调用 it.__next__(),获取迭代器的下一个元素,并赋值给 x,然后执行循环体;执行完后,for 循环会继续调用 it.__next__(),获取迭代器的下一个元素,并赋值给 x,执行循环体 …… 当 for 循环调用 it.__next__()产生 StopIteration 异常时,循环结束;
当程序出现错误,python会自动引发异常,也可以通过raise显示地引发异常。一旦执行了raise语句,raise后面的语句将不能执行。
class Foo:
def __init__(self,x):
self.x = x
def __iter__(self):
return self
def __next__(self):
if self.x == 10:
raise StopIteration("程序终止")
self.x += 1
return self.x
f1 = Foo(7)
# print(f1.__next__()) #8
# print(f1.__next__()) #9
# print(f1.__next__()) #10
# print(f1.__next__()) #StopIterati