Декоратор‑мемоизация для функций

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

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

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

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

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

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

Условие

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

def memoize(target):
    # TODO: реализация кеширующего декоратора
    pass

Ответ

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

from functools import wraps

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

Это учебный вариант для хешируемых аргументов и функций без существенных побочных эффектов. Эквивалентные вызовы с позиционными и именованными аргументами могут образовать разные ключи. Изменяемый результат возвращается тем же объектом, поэтому его правки повлияют на кеш. В реальной задаче задайте размер/TTL; стандартный lru_cache уже реализует ограничение размера. Конкурентные первые вызовы требуют отдельной политики.

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

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

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

Подробнее