Форум сайта python.su
Думаю задам не один вопрос по юзанию декораторов поскольку толком ни черта не понимаю(
допустим есть следующий код
def repeat(func): def wrapper(*args, **kwargs): for i in range(7): func(*args, **kwargs) return wrapper @repeat def speak(line): print(line) speak("Пожалуй это строка")
Офлайн
Вот с декоратором
>>> def repeat(func): ... def wrapper(*args, **kwargs): ... for i in range(7): ... func(*args, **kwargs) ... return wrapper ... >>> @repeat ... def speak(line): ... print(line) ... >>> speak("Пожалуй это строка") Пожалуй это строка Пожалуй это строка Пожалуй это строка Пожалуй это строка Пожалуй это строка Пожалуй это строка Пожалуй это строка >>>
>>> def repeat(func): ... def wrapper(*args, **kwargs): ... for i in range(7): ... func(*args, **kwargs) ... return wrapper ... >>> def speak(line): ... print(line) ... >>> speak = repeat(speak) >>> >>> speak("Пожалуй это строка") Пожалуй это строка Пожалуй это строка Пожалуй это строка Пожалуй это строка Пожалуй это строка Пожалуй это строка Пожалуй это строка >>>
technobotЧтобы не менять функцию, которая декорируется.
4. Зачем вообще нужны декораторы?
>>> def repeat2(func): ... def wrapper(*args, **kwargs): ... for i in range(2): ... func(*args, **kwargs) ... return wrapper ... >>> def repeat3(func): ... def wrapper(*args, **kwargs): ... for i in range(3): ... func(*args, **kwargs) ... return wrapper ... >>> def brackets(func): ... def wrapper(*args, **kwargs): ... tup = tuple('[' + str(i) + ']' for i in args) ... return func(*tup, **kwargs) ... return wrapper ... >>> @brackets ... @brackets ... @repeat2 ... @repeat2 ... @repeat3 ... def speak(line): ... print(line) ... >>> speak("Пожалуй это строка") [[Пожалуй это строка]] [[Пожалуй это строка]] [[Пожалуй это строка]] [[Пожалуй это строка]] [[Пожалуй это строка]] [[Пожалуй это строка]] [[Пожалуй это строка]] [[Пожалуй это строка]] [[Пожалуй это строка]] [[Пожалуй это строка]] [[Пожалуй это строка]] [[Пожалуй это строка]] >>>
Офлайн
Офлайн
Вроде бы разобрался, спасибо
Офлайн
Разобраться с декораторами мне помогла вот эта…
ayb+
Серия статей про декораторы
Отредактировано TitanFighter (Дек. 8, 2015 13:08:15)
Офлайн