Привет! Я решил попробовать написать декоратор, который будет кэшировать вызовы функции․ Вот как выглядит мой код⁚
python
def cache_deco(func)⁚
cache {}
def wrapper(*args)⁚
if args in cache⁚
return cache[args]
else⁚
result func(*args)
cache[args] result
return result
return wrapper
code []
while data ⁚ input⁚
code․append(data)
code ″\n″․join(code)
exec(code)
@cache_deco
def fib(k)⁚
if k < 2⁚
return 1
return fib(k ⸺ 1) fib(k ⎼ 2)
print(fib(30))
В этом коде я создаю декоратор с именем `cache_deco`․ Внутри декоратора у меня есть словарь `cache`, где я буду хранить результаты вызовов функции․
Моя функция-обёртка `wrapper` принимает любое количество аргументов `*args`․ Я проверяю, есть ли эти аргументы в кэше․ Если есть, то я просто возвращаю значение из кэша․ Если аргументы нет в кэше, то я вызываю исходную функцию `func` с этими аргументами, сохраняю результат в кэше и возвращаю его․
Я возвращаю `wrapper` из декоратора, чтобы она стала новой функцией, заменив исходную функцию `fib`․
После этого, я записываю введённый код в список `code` и объединяю его в одну строку с помощью метода `join`․ Потом я вызываю эту строку с помощью функции `exec`, чтобы выполнить код, включая вызов функции `fibr`, для которой я применил декоратор․
После выполнения кода и вызова функции, я выводлю результат на экран с помощью функции `print`․
Надеюсь, мой опыт будет полезным для тебя! Если у тебя есть какие-либо вопросы, не стесняйся задавать․