Кэширование (мемоизация) с помощью lru_cache
import functools#lru_cache #decorator
import time
# кэширование до 12 различных результатов
@functools.lru_cache(maxsize=12)
def slow_func(x):
time.sleep(2) # Имитируем длительные вычисления
return x
slow_func(1) # ... ждём 2 секунды до возврата результата
slow_func(1) # результат уже кэширован - он возвращается немедленно!
slow_func(3) # ... опять ждём 2 секунды до возврата результата