Уведомления

Группа в Telegram: @pythonsu

#1 Март 31, 2019 10:42:20

Fixx_Jr
Зарегистрирован: 2019-01-30
Сообщения: 31
Репутация: +  0  -
Профиль   Отправить e-mail  

внешний счетчик для декоратора

задание такое: “Write a Decorator named after5 that will ignore the decorated function in the first 5 times it is called.”
Написал вот такое, конечо же, неработающее, так как счетчик внутри декоратора. Не могу сообразить, как заставить счетчик работать
и еще, посмотрите, правильно ли сделан игнор декорируемой функции?
спасибо

 def doit():
    print ('Yo!')
def after5 (func):
    def wrapper ():
        cnt = 1
        if cnt <= 5:
            return
        func()
        cnt +=1
    return wrapper
doit = after5(doit)
for i in range (6):
    doit()

Отредактировано Fixx_Jr (Март 31, 2019 10:42:34)

Офлайн

#2 Март 31, 2019 11:22:23

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

внешний счетчик для декоратора

   
def skip(n):
    attempts = 0
    def decorator(func):
        def wrapper(*args, **kwargs):
            nonlocal attempts
            attempts += 1
            if attempts > n:
                print("Function now works")
                return func(*args, **kwargs)
            else:
                print("Function has been waiting")
                return None
        return wrapper
    return decorator
  
@skip(5)
def inc(a):
    return a + 1
  
print(inc(1))
print(inc(1))
print(inc(1))
print(inc(1))
print(inc(1))
print(inc(1))
print(inc(1))
print(inc(1))
print(inc(1))
print(inc(1))



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version