Декоратор (декоратор)
- Функция основа
# Функция Function.py # 1) является функция объекта DEF Hello (): возврат ' ! Hello, World ' FUNC = Hello печати (FUNC) # <Объект> Печать (FUNC ()) # 2) могут быть вложенными функции, определенные в другая функция внутреннего DEF Show (): Печать ( ' Запускать в шоу () ' ) DEF сообщение (= Слово ' вводного ' ): вернуться Слово печати (Message ()) Show () # 3) функция возвращает в качестве аргумента. DEF getWordType ( вид ='' ): Защита по умолчанию (слово = '' ): возвращение слово Защиты верхнее (слово = '' ): возвращение word.upper () Защиты ниже (слово = '' ): возвращение word.lower () , если kind.lower ( ) == ' ниже ' : вернуть нижнюю Элиф kind.lower () == ' верхний ' : вернуться верхний еще : вернуться по умолчанию wordType = getWordType (' Верхняя ' ) печать (wordType) печать (wordType ( ' Сопротивление бесполезно! ' )) # 4)函数作为参数传入 Защита GetName (имя = ' Льва ' ): возвращение имени Защита Foo (FUNC): печать ( ' I будет вызывать функцию GetName позже ' ) печати (FUNC ()) Foo (GetName)
- Декоратор и функции для сравнения
# Decorator.py装饰器 # 不使用装饰器情况 четкости my_new_decorator (a_function_to_decorator): четкости the_wrapper_around_the_original_function) (: печать ( ' Befor функция работает ' ) a_function_to_decorator () печать ( ' После выполнения функции ' ) возвращение the_wrapper_around_the_original_function # 将函数作为参数返回 Защита a_stand_alone_function (): печать ( «Я САМОСТОЯТЕЛЬНОЕ функцию, не смейте изменить меня » ) a_stand_alone_function () a_stand_alone_function_decorated = my_new_decorator (a_stand_alone_function) # 将函数作为参数传入 печати (a_stand_alone_function_decorated) a_stand_alone_function_decorated () # 使用装饰器语法糖"@" @my_new_decorator Защиту another_stand_alone_function (): печать ( ' оставить меня в покое ' ) another_stand_alone_function () # такой же , как: another_stand_alone_function = my_new_decorator (another_stand_alone_function)
- Декоративные приложения
# Decorator_web.py веб中的装饰器应用 Защита makebold (FUNC): Защита обертка (): возвращение ' <б> ' + FUNC () + ' </ b> ' возвращение обертки Защита makeitalic (FUNC): Защита обертка () : возвращение ' <я> ' + FUNC () + ' </ I> ' возвращение обертка @makebold @makeitalic Защиты слово (): возвращение " Привет, декоратор! ' Печать (слово ())
# Decorator_time.py проверка декоратор функция Время работы Импорт Время импорта OS DEF Timer (FUNC): DEF warpper (УХО): time_begin = time.ctime () Печать ( ' Бегина @ ' + time_begin) FUNC (УХО) TIME_END = time.ctime () Печать ( ' End @ ' + TIME_END) Печать ( ' Бегина @ ' + time_begin) Печать ( ' End @ '+ TIME_END) возвращение warpper @timer DEF Walk (R & л УХО = ' D: \ PyCharm \ Python \ Practice ' ): для корня, каталоги, файлы в os.walk (УХО): # Print (корень) каталог печати # все подкаталоги абсолютный путь # Print (каталоги) # печать список подкаталогов в каждой директории # печати (файлы) # распечатать список всех файлов в печати (корень) для файла в формате: Печать ( « \ т » + файл ) Прогулка (ВПЦ = Р & л ' D: \ PyCharm ' )
- Он содержит все параметры и возвращаемое значение декоратора
# Decorator_args.py包含所有参数的装饰器 импорта время Защита таймер (FUNC): Защита внутреннего (* Args ** kwargs): начать = time.time () повторно = FUNC (* арг ** kwargs) конца = время .time () возвращение вновь вернуть внутренний @timer # ==> func1 = таймер (func1) защиту func1 (а, б): печать ( ' в func1 ' ) возвращают а, б @timer # ==> func2 = таймер (func2 ) Защитаfunc2 (а): печать ( ' В func2 и получить ' , а) возвращение ' func2 над ' func1 ( ' аааааа ' , ' BBBBBB ' ) печать (func2 ( ' аааааа ' ))
- Это функция нормальная функция может быть использована декорированный метод
# Decorator_method.py от functools импорта оборачивает Защиту Деко (FUNC): @wraps (FUNC) четкости обертку (* арг ** kwargs): возвращение FUNC (* арг, ** kwargs) возвращение обертка @deco Защиту индекс (): ' '' DOCS здесь декоратора ''» печати ( ' из индекса ' ) индекс () для печати (индекс. __name__ ) печать (индекс. __doc__ )