__next__和__iter__实现迭代器协议
# __next__和__iter__实现迭代器协议 class Foo: def __init__(self, n): # 初始化 self.n = n def __iter__(self): # 定义类的__iter__方法,实例化时就为一个可迭代对象 return self def __next__(self): # 定义类的__next__方法,并在其中设置抛出StopIteration的条件 self.n += 1 if self.n > 100: raise StopIteration return self.n f1 = Foo(10) for i in f1: # 本质上就是iter(f1)==f1.__iter__() print(i) # 迭代器协议实现斐波那契数列 class Fib: def __init__(self): # 初始化 self.a = 0 self.b = 1 def __iter__(self): # 定义类的__iter__方法,实例化时就为一个可迭代对象 return self def __next__(self): # 定义类的__next__方法,并在其中设置抛出StopIteration的条件 self.a, self.b = self.b, self.a + self.b if self.a > 10000: raise StopIteration return self.a fib = Fib() print(next(fib)) print(next(fib)) print(next(fib)) print(next(fib)) print(next(fib)) print('----------------------') for i in fib: print(i)