JustCaptain kod-buduschego
a8f57e3b0908bc3333dc3d5c7a2fbd787fa9c317
Перейти к файлу
Код
kod-buduschego Python 2025-20264.4. Декораторpracticesskilloktask_4.py
anc update c70a58f 8 октября 2026 г.
task_4.py
"""
TASK-M1 — Кеширование профилей клиентов
Контекст
Для каждого клиента строится аналитический профиль.
Построение занимает много времени из-за запросов к БД.

Данные


⸻

Требования

Реализовать декоратор кеширования.

Если профиль уже был построен для данного клиента — вернуть его из кеша.

⸻
"""

import time
from typing import Any


def cache(key: str) -> Any:
    data: dict = {}

    def decorator(func) -> Any:
        data[key] = {}

        def wrapper(*args, **kwargs) -> Any:
            if data[key].get(args[0]) is None:
                result = func(*args, **kwargs)
                data[key][args[0]] = result
                print("NON CACHE")
                return result
            else:
                print("CACHE")
                return data[key][args[0]]

        return wrapper

    return decorator


customers: dict[int, dict[str, str]] = {
    1: {"name": "Alex"},
    2: {"name": "Kate"},
    3: {"name": "John"},
}


@cache(key="profile")
def get_customer_profile(customer_id: int) -> dict[str, str]:
    time.sleep(2)
    return customers[customer_id]


get_customer_profile(1)
get_customer_profile(1)