Если функция может легитимно возвращать NaN (это нормальное поведение), а твоя текущая реализация кэша в этом случае выдаст ошибку или всегда будет пересчитывать — как ты это поправишь?

Не используйте NaN как признак отсутствия кеша: храните состояние отдельно или проверяйте наличие ключа. Корректный результат NaN должен кешироваться так же, как любой другой результат.

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

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

Не используйте NaN как признак отсутствия кеша: храните состояние отдельно или проверяйте наличие ключа. Корректный результат NaN должен кешироваться так же, как любой другой результат.

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

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

Не используйте NaN как признак отсутствия кеша: храните состояние отдельно или проверяйте наличие ключа. Корректный результат NaN должен кешироваться так же, как любой другой результат.

Для простого словаря:

missing = object()
value = cache.get(key, missing)
if value is missing:
    value = compute()
    cache[key] = value
return value

Служебный sentinel не должен быть допустимым результатом пользовательской функции. Для TTL отдельно храните срок и проверяйте его по монотонным часам. Сравнение value == float('nan') некорректно, поскольку NaN не равен самому себе. Если NaN входит в аргументы ключа, потребуется отдельная, явно согласованная нормализация ключей — это другая задача.

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

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

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

Подробнее