# __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)