用迭代器實現斐波那契數列
阿新 • • 發佈:2019-01-05
可以直接作用於for迴圈的物件統稱為可迭代物件:Iterable
可以被next()函式呼叫並不斷返回下一個值的物件稱為迭代器: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()