Не используйте 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 входит в аргументы ключа, потребуется отдельная, явно согласованная нормализация ключей — это другая задача.