若是一個類想被用於for ... in循環,相似list或tuple那樣,就必須實現一個__iter__()和__next__()方法,該方法返回一個迭代對象
而後,Python的for循環就會不斷調用該迭代對象的__next__()方法拿到循環的下一個值,直到遇到StopIteration錯誤時退出循環spa
class Fib(object): def __init__(self): self.a, self.b = 0, 1 # 初始化兩個計數器a,b def __iter__(self): return self # 實例自己就是迭代對象,故返回本身 def __next__(self): self.a, self.b = self.b, self.a + self.b # 計算下一個值 if self.a > 100000: # 退出循環的條件 raise StopIteration() return self.a # 返回下一個值 for n in Fib(): print(n)
#輸出:1 #輸出:1 #輸出:2 #輸出:3 #輸出:5 #輸出:... #輸出:46368 #輸出:75025