Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Помогите с python срочно пожалуйста

Бравлик Supersellonelove Ученик (226), на голосовании 1 год назад
Контекст
Вы разрабатываете программу для оптимизации вычислений чисел Фибоначчи. Числа Фибоначчи вычисляются рекурсивной функцией, каждое число равно сумме двух предыдущих чисел. Однако вы заметили, что при больших значениях чисел Фибоначчи вычисления занимают значительное время, так как многие значения вычисляются повторно. Вам поручено создать декоратор, который кэширует результаты вызова функции и позволяет избежать повторных вычислений для одних и тех же аргументов.

Задача
Создайте декоратор, который кэширует (сохраняет для дальнейшего использования) результаты вызова функции и, при повторном вызове с теми же аргументами, возвращает сохранённый результат.

Примените его к рекурсивной функции вычисления чисел Фибоначчи.

В итоге декоратор должен проверять аргументы, с которыми вызывается функция, и, если такие аргументы уже использовались, должен вернуть сохранённый результат вместо запуска расчёта.
Голосование за лучший ответ
Философ Древнегреческий Мастер (1713) 1 год назад
Вот пример кода на Python для создания декоратора:

def cache_decorator(function):
cache = {}
def wrapper(*args, **kwargs):
if args in cache:
return cache[args]
else:
result = function(*args, **kwargs)
cache[args] = result
return result
return wrapper
Этот декоратор принимает функцию в качестве аргумента и создает новую функцию-обертку. Внутри функции-обертки происходит проверка, был ли уже вызван аргумент функции. Если да, то возвращается сохраненный результат, иначе вызывается исходная функция и результат сохраняется в кэше. В итоге, при следующем вызове функции с тем же аргументом, результат будет возвращен из кэша, а не вызовется исходная функция.
S.H.I. Оракул (74226) 1 год назад
 from functools import lru_cache 

@lru_cache(maxsize=None)
def fib(n):
if n < 2:
return n
return fib(n-1) + fib(n-2)
В этом примере мы используем декоратор lru_cache из модуля functools. Он сохраняет результаты вызова функции и при повторном вызове с теми же аргументами возвращает сохранённый результат вместо запуска расчёта.
В данном случае мы применили декоратор к рекурсивной функции вычисления чисел Фибоначчи.
Алекс КухаВысший разум (477438) 1 год назад
как не любить Пайтон
Похожие вопросы