Я пытаюсь добавить своего рода кеш в дорогостоящую функцию, используя фиксированный словарь. Что-то вроде этого:
def func(arg):
if arg in precomputed:
return precomputed[arg]
else:
return expensive_function(arg)
Теперь было бы немного чище, если бы я мог сделать что-то подобное, используя dict.get()
значений по умолчанию:
def func(arg):
return precomputed.get(arg, expensive_function(arg))
Проблема в том, что expensive_function()
запускается независимо от успеха precomputed.get()
, так что мы получаем весь жир за отсутствие вкуса.
Есть ли способ отложить вызов expensive_function()
здесь, чтобы он вызывался только в случае сбоя precomputed_get()
?
try: return pre[arg] except KeyError: return exp_fun(arg)
… Почему он должен быть однострочным? - person deceze♦   schedule 21.02.2020lru_cache
может быть альтернативным решением. . - person Matthias   schedule 21.02.2020for
, вы полагаетесь на исключение для остановить это. Так что бороться с исключениями в Python бесполезно. - person Amadan   schedule 21.02.2020