Запоминание результатов функции

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

Короткий ответ

Что ответить на собеседовании

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

Подробный разбор

Ответ с пояснениями

Условие

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

Ответ

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

Базовый вариант:

from functools import wraps

def memoize(func):
    cache = {}
    @wraps(func)
    def wrapper(*args, **kwargs):
        key = (args, tuple(kwargs.items()))
        if key not in cache:
            cache[key] = func(*args, **kwargs)
        return cache[key]
    return wrapper

Порядок kwargs входит в ключ, поэтому семантически равные вызовы могут иметь разные записи. Кеш не ограничен по размеру; для сервиса нужны eviction/TTL. Исключения не сохраняются, а изменяемый результат выдаётся по общей ссылке. Отдельно решаются конкурентные вычисления одного ключа.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее