Встречается на собеседованиях • сегодня
Как написать декоратор кэширующий значение функции
Декоратор для кэширования результатов функции можно реализовать с помощью словаря, сохраняя аргументы как ключи, а результаты как значения. Особенно полезно для функций с тяжелыми вычислениями.
python
from functools import wraps
def cache(func):
cached_results = {}
@wraps(func)
def wrapper(*args, **kwargs):
key = (args, frozenset(kwargs.items()))
if key not in cached_results:
cached_results[key] = func(*args, **kwargs)
return cached_results[key]
return wrapper
Пример использования
@cache
def fibonacci(n):
if n < 2:
return n
return fibonacci(n-1) + fibonacci(n-2)
print(fibonacci(10)) # Вычисляется только при первом вызове
text
Нюансы:
1. Используем `functools.wraps` для сохранения метаданных функции
2. Ключ формируется из позиционных и именованных аргументов
3. `frozenset` для kwargs, так как словари нехэшируемы
4. Для production лучше использовать `functools.lru_cache` из стандартной библиотеки
Софи собрала все вопросы. Тренируйся и получай
офферы быстрее!
офферы быстрее!
Попробовать бесплатно
Следующий вопрос
Это единственный вопрос по вашему фильтру
как отвечать на вопрос
пример собеседования
фреймворки на собеседовании
типичные вопросы junior
интервью вопросы и ответы