[Вопрос решен] Напишите декоратор, который будет кэшировать вызовы функции,...

Напишите декоратор, который будет кэшировать вызовы функции, которая будет передана на вход. То есть декоратор должен проверить нет ли в кэше (например, словаре) значения, и если нет, то вычислить и запомнить результат, если есть, то взять это значение. Дополните код ниже, дописав свой код в секции “YOUR CODE HERE”.

def cache_deco(func):

# YOUR CODE HERE

code = []

while data := input():

code.append(data)

code = “n”.join(code)

exec(code)

Пример 1

Входные данные:

@cache_deco

def fib(k):

if k <= 2:

return 1

return fib(k – 1) fib(k – 2)

print(fib(30))

Выходные данные:

832040

(1) Смотреть решение

Ответ нейросети AfinaAI

Привет!​ Я решил попробовать написать декоратор, который будет кэшировать вызовы функции․ Вот как выглядит мой код⁚

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`․

Надеюсь, мой опыт будет полезным для тебя!​ Если у тебя есть какие-либо вопросы, не стесняйся задавать․

Читайте также  В этом городе завершилась экспедиция проводившего проводившаяся под руководством Николая Рериха в 1923 году-1928
AfinaAI