Встречается на собеседованиях • сегодня

Как написать декоратор кэширующий значение функции

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

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` из стандартной библиотеки
Sophi
Софи собрала все вопросы. Тренируйся и получай
офферы быстрее!
Попробовать бесплатноArrow

Следующий вопрос

Это единственный вопрос по вашему фильтру

как отвечать на вопрос
пример собеседования
фреймворки на собеседовании
типичные вопросы junior
интервью вопросы и ответы