Как сделать кэширование `sum_digits` более идиоматично и не смешивать его с бизнес-логикой функции?

Вынесите кеширование в декоратор functools.lru_cache или cache, оставив sum_digits только вычисление суммы цифр. Аргументы должны быть хешируемыми, а результат — зависеть от них предсказуемо.

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

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

Вынесите кеширование в декоратор functools.lru_cache или cache, оставив sum_digits только вычисление суммы цифр. Аргументы должны быть хешируемыми, а результат — зависеть от них предсказуемо.

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

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

Вынесите кеширование в декоратор functools.lru_cache или cache, оставив sum_digits только вычисление суммы цифр. Аргументы должны быть хешируемыми, а результат — зависеть от них предсказуемо.

Пример с ограничением памяти:

from functools import lru_cache

@lru_cache(maxsize=4096)
def sum_digits(number: int) -> int:
    return sum(int(char) for char in str(abs(number)))

cache хранит результаты без ограничения числа ключей; для большого разнообразия входов это может расходовать память. Через cache_info() можно оценить попадания, через cache_clear() — очистить данные. Если функция дешёвая, накладные расходы кеша могут не окупиться.

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

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

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

Подробнее