quot;""Итератор последовательности Фибоначчи до N""" 


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

quot;""Итератор последовательности Фибоначчи до N"""

Поиск

"""Итератор последовательности Фибоначчи до N"""

 

def __init__(self, N):

 

self.n, self.a, self.b, self.max = 0, 0, 1, N

 

def __iter__(self):

 

# сами себе итератор: в классе есть метод next() return self


 


def next(self):

 

if self.n < self.max:

 

a, self.n, self.a, self.b = self.a, self.n+1, self.b, self.a+self.b return a

 

else:

 

raise StopIteration

 

# Использование:

 

for i in Fibonacci(100): print i,

 

Простые генераторы

 

Разработчики языка не остановились на итераторах.Как оказалось,в интерпретатореPython достаточно просто реализовать простые генераторы. Под этим термином фактически понимается специальный объект,вычисления в котором продолжаются до выработки очередного значения,а затем приостанавливаются до возникновения необходимости в выдаче следующего значения.Простой генератор формируется функцией-генератором,которая синтаксически похожа на обычную функцию,но использует специальный оператор yield для выдачи следующего значения.При вызове такая функция

 

ничего не вычисляет,а создает объект с интерфейсом итератора для получения значений.Другими словами,если функция должна возвращать последовательность,из нее довольно просто сделать генератор,который будет функционально эквивалентной"ленивой"

 

реализацией.Ленивыми называются вычисления,которые откладываются до самого последнего момента,когда получаемое в результате значение сразу используется в другом вычислении.

 

Для примера с последовательностью Фибоначчи можно построить такой вот генератор:

 

def Fib(N): a, b = 0, 1

 



Поделиться:


Последнее изменение этой страницы: 2024-06-27; просмотров: 68; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 216.73.217.21 (0.006 с.)