1. 程式人生 > >用迭代器實現斐波那契數列

用迭代器實現斐波那契數列

可以直接作用於for迴圈的物件統稱為可迭代物件:Iterable

可以被next()函式呼叫並不斷返回下一個值的物件稱為迭代器:Iterator

參考:Python學習筆記 - 迭代器Iterator

用迭代器實現斐波那契數列

Python3環境下可實現迭代:

class Fib(object):
    def __init__(self, max):
        super(Fib, self).__init__()
        self.max = max

    def __iter__(self):
        self.a = 0
        self.
b = 1 return self def __next__(self): fib = self.a if fib > self.max: raise StopIteration self.a, self.b = self.b, self.a + self.b return fib # 定義一個main函式,迴圈遍歷每一個菲波那切數 def main(): # 20以內的數 fib = Fib(20) for i in fib: print
(i) # 測試 if __name__ == '__main__': main()

0
1
1
2
3
5
8
13

Python2環境下執行報錯:

TypeError: iter() returned non-iterator of type ‘Fib’

def _next_(self) is for Python 3

For Python 2 you need to add method next()

class Fib(object):
    def __init__(self, max):
        super(Fib, self).__init__(
) self.max = max def __iter__(self): self.a = 0 self.b = 1 return self def __next__(self): fib = self.a if fib > self.max: raise StopIteration self.a, self.b = self.b, self.a + self.b return fib def next(self): return self.__next__() def main(): fib = Fib(20) for i in fib: print(i) if __name__ == '__main__': main()