Вынесите кеширование в декоратор functools.lru_cache или cache, оставив sum_digits только вычисление суммы цифр. Аргументы должны быть хешируемыми, а результат — зависеть от них предсказуемо.
Как сделать кэширование `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() — очистить данные. Если функция дешёвая, накладные расходы кеша могут не окупиться.