class FibIterator(object): def __init__(self, n): self.n = n self.current = 0 self.num1 = 0 def __next__(self): """被next()函数调用来获取下一个数""" if self.current < self.n: num = self.num1 self.num1+=1 self.current += 1 return num else: raise StopIteration def __iter__(self): return self if __name__ == '__main__': fib = FibIterator(10) print(list(fib)) print(list(fib)) ------------------------------- 运行结果
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
[]
-----------------------------------
分析 创建迭代器完成,第一次 list(fib ) StopIteration异常 n=10 current =10 处理返回的__iter__返回自己fib,这时的fib不再是初始化了(n=0,current=0)。 第二次调用时候.n=10 current =10 直接异常了,所以没返回值 顾[]