Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Задача пайтон .

Poul Lirman Ученик (152), на голосовании 3 недели назад
как написать функцию, которая принимает любую функцию f и возвращает её оптимизированную версию f_opt, которая кэширует результаты вызовов f для любых возможных аргументов, включая изменяемые объекты, такие как списки, словари и даже другие функции? При этом нужно обеспечить, чтобы кэширование работало корректно даже при изменении аргументов после вызова, и избежать утечек памяти. Как это реализовать без использования сторонних библиотек???
Голосование за лучший ответ
Лев Семенищев Мастер (2127) 1 месяц назад
def memoize(func):
cache = {}

def memoized_func(*args, **kwargs):
key = (args, frozenset(kwargs.items()))
if key not in cache:
cache[key] = func(*args, **kwargs)
return cache[key]

return memoized_func
Рустам Абдрашитов Мыслитель (9508) 1 месяц назад
 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
Похожие вопросы