def cache_function(f):
cache = {}
def f_opt(*args):
# Преобразуем аргументы в неизменяемый тип для использования в качестве ключа
key = tuple(map(repr, args))
if key not in cache:
cache[key] = f(*args)
return cache[key]
return f_opt
# Пример использования
@cache_function
def expensive_function(x):
# Долгое вычисление
return x * x