def cache():

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

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

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

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

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

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

Условие

def cache(): """ Допиши код декоратора здесь """ pass

Ответ

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

from functools import wraps

def cache():
    def decorate(fn):
        results = {}
        @wraps(fn)
        def wrapped(*args, **kwargs):
            key = (args, tuple(kwargs.items()))
            if key not in results:
                results[key] = fn(*args, **kwargs)
            return results[key]
        return wrapped
    return decorate

Применение: @cache(). Значение None тоже кешируется. Здесь нет TTL, ограничения размера и защиты от параллельных повторных вычислений. Для production выбирайте подходящую политику; не кешируйте этой обёрткой coroutine, побочные эффекты или изменяемые результаты без явного контракта.

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

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

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

Подробнее