class Fib(object):
def __init__(self, max=6):
self._n, self._a, self._b = 0, 0, 1 # 初始化两个计数器a,b
self._max = max
def __iter__(self):
return self # 实例本身就是迭代对象,故返回自己
def __next__(self):
self._a, self._b = self._b, self._a + self._b # 计算下一个值
if self._n == self._max: # 退出循环的条件
raise StopIteration();
self._n += 1
return self._a # 返回下一个值
for i in Fib(8):
print(i)
当Python执行for循环时,自动调用__iter__方法,__iter__的返回类实例本身(因为在for循环中,参与迭代的数就是类实例对象本身)。然后执行__next__,表明每个生成器里,__iter__方法总是和__next__方法同时存在