/
IvanKhabarov
/
python
Обзор
Документация
Войти
/
IvanKhabarov
/
python
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
Аналитика
Безопасность
main
Home_Task/HT_9/task4.py
47 строк
3 KB
Ivan-Khabarov
Добавлено ДЗ
01 окт 2024, 19:24
01 окт 2024, 19:24
3f16c8f
Код
Авторство
О чём код?
# Задача 4. Кэширование для ускорения вычислений # Создайте декоратор, который кэширует (сохраняет для дальнейшего использования) # результаты вызова функции и, при повторном вызове с теми же аргументами, # возвращает сохранённый результат. # Примените его к рекурсивной функции вычисления чисел Фибоначчи. # В итоге декоратор должен проверять аргументы, с которыми вызывается функция, и, # если такие аргументы уже использовались, должен вернуть сохранённый результат # вместо запуска расчёта. def cache_decorator(func): """ Декоратор для кэширования результатов функции. :param func: Декорируемая функция :return: Функция-обертка с кэшированием """ cache = {} # Словарь для хранения кэшированных результатов def wrapper(number): """ Функция-обертка, которая сначала проверяет кэш перед вызовом функции. :param number: Аргумент для декорируемой функции :return: Результат выполнения функции """ if number in cache: return cache[number] result = func(number) cache[number] = result # Сохраняем результат в кэше return result return wrapper @cache_decorator def fibonacci(number): """ Функция для вычисления чисел Фибоначчи с использованием рекурсии. :param number: Позиция числа Фибоначчи :return: Число Фибоначчи """ if number <= 1: return number return fibonacci(number - 1) + fibonacci(number - 2) print(fibonacci(10)) # Ожидаем, что результат будет вычислен и закэширован print(fibonacci(10)) # Ожидаем, что результат будет возвращен из кэша print(fibonacci(5)) # Ожидаем, что результат будет вычислен и закэширован