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

Напишите декоратор, который будет кэшировать вызовы функции, которая будет передана на вход. То есть декоратор должен проверить нет ли в кэше (например, словаре) значения, и если нет, то вычислить и запомнить результат, если есть, то взять это значение. Дополните код ниже, дописав свой код в секции “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) Смотреть ответ
Данный ответ сгенерирован автоматически нейросетью, если Вы не нашли ответ на свой вопрос, попробуйте спросить нейросеть самостоятельно, для получения необходимого результата.
Это бесплатно.
Спросить нейросеть бесплатно

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

Здравствуйте!​ Я хотел бы поделиться с вами, как я написал декоратор для кэширования вызовов функций.​ Этот декоратор будет проверять наличие значения в кэше и возвращать его, если оно уже было вычислено, или вычислять и запоминать результат, если значения нет в кэше.​
Вот как выглядит код декоратора⁚
def cache_deco(func)⁚
    cache  {}
    
    def wrapper(*args, **kwargs)⁚
        key  (args, frozenset(kwargs.​items))
        
        if key not in cache⁚
            cache[key]  func(*args, **kwargs)
        
        return cache[key]
    

    return wrapper
Теперь, чтобы использовать этот декоратор, вам нужно применить его к вашей функции.​ Вот пример использования⁚
@cache_deco
def fib(k)⁚
    if k nlt; 2⁚
        return 1
    return fib(k ─ 1)   fib(k ー 2)

print(fib(30))
Суть декоратора заключается в следующем⁚
  1. Он создает словарь с именем `cache`, который будет служить для хранения кэшированных значений.​ Ключами словаря будут кортежи, состоящие из аргументов и ключей-значений функции.​
  2. Декоратор определяет внутреннюю функцию `wrapper`, которая будет обертывать исходную функцию.
  3. Внутри `wrapper` декоратор проверяет, есть ли ключ в словаре `cache`.​ Если ключа нет, то вызывается исходная функция и ее результат записывается в кэш с использованием ключа.​ Если ключ есть, то результат берется из кэша.
  4. Возвращается функция `wrapper` в качестве ″укрытия″ для исходной функции.​
Теперь, когда вы запустите код, вы увидите, что первый запуск функции занимает какое-то время, но если вы вызовете ее с теми же аргументами во второй раз, результат будет возвращаться мгновенно, так как он будет браться из кэша.

Надеюсь, мой опыт с написанием данного декоратора окажется полезным для вас!​

Читайте также  Первую или вторую контрольные работы по математике успешно написали 33 студента, первую или третью – 31 студент, вторую или третью – 32 студента. Не менее двух контрольных работ выполнили 20 студентов.

Сколько студентов успешно решили только одну контрольную работу?

Оцените статью
Nox AI