实现了__iter__方法的对象是可迭代的,实现了__next__方法的对象是迭代器
for in 实际上做了两件事。第一个是调用__iter__方法生成一个可迭代的对象,第二个是循环调用__next__方法,直到遇到StopIteration
class Fib:
def __init__(self):
self.a, self.b = 0, 1
def __iter__(self):
return self
def __next__(self):
self.a, self.b = self.b, self.a + self.b
if self.a > 1000:
raise StopIteration
return self.a
def main():
for n in Fib():
print(n)