Декораторы в Python, задание 2

Напишите декоратор, оптимизирующий работу декорируемой функции. Декоратор должен сохранять результат работы функции на ближайшие три запуска и вместо выполнения функции возвращать сохранённый результат. После трёх запусков функция должна вызываться вновь, а результат работы функции — вновь кешироваться.

Подсказка:
Создайте в декораторе переменную-кеш, сохраните в ней результат выполнения декорируемой функции. Создайте в декораторе переменную, хранящую счётчик запросов. Пока значение счётчика ниже предельного — отдавайте результат, сохранённый в кеше. Когда число запросов к функции превысит предел и пора будет снова высчитывать результат выполнения функции — сбросьте счётчик, выполните декорируемую функцию и заново сохраните результат её выполнения в переменную-кеш.

Код:



def cache3(func):
    counter = 0
    result = func()
    def wrapper():
        nonlocal counter
        counter += 1
        if counter<=3:
            return result
        else:
            counter = 1
            return func()
    return wrapper


@cache3
def heavy():
    print('Сложные вычисления')
    return 1

print(heavy())
# Сложные вычисления
# 1
print(heavy())
# 1
print(heavy())
# 1

# Опять кеш устарел, надо вычислять заново
print(heavy())
# Сложные вычисления
# 1


Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: