class Fib:
"""По объектам этого класса можно итерироваться и получать числа Фибоначчи"""
class _Fib_iter:
"""Внутренний класс — итератор"""
def __init__(self):
self.i = 0
self.fib_previous = 0
self.fib_last = 1
def __next__(self):
if 0 <= self.i <= 1:
j = self.i
self.i += 1
return j
if self.i >= 2:
j = self.fib_previous + self.fib_last
self.i += 1
self.fib_previous, self.fib_last = self.fib_last, self.fib_previous + self.fib_last
return j
def __iter__(self):
"""Создать и вернуть итератор"""
return Fib._Fib_iter()
Печать чисел подряд и в виде списка:
from itertools import islice
for i in islice(Fib(), 30):
print(i)
0 1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987 1597 2584 4181 6765 10946 17711 28657 46368 75025 121393 196418 317811 514229