Оглавление:
Карта сайта:
Оглавление:
Карта сайта:
Итак, что же это такое? Для того, чтобы понять, как работают декораторы, в первую очередь следует вспомнить, что функции в python являются объектами, соответственно, их можно возвращать из другой функции или передавать в качестве аргумента. Также следует помнить, что функция в python может быть определена и внутри другой функции.
Вспомнив это, можно смело переходить к декораторам. Декораторы — это, по сути, «обёртки», которые дают нам возможность изменить поведение функции, не изменяя её код.
def hello(): return 'Hello, i am '+'hello' def superFunc(func): print('Hello, i am '+'superFunc') print(func()) superFunc(hello)
Результат выполнения:
Hello, i am superFunc Hello, i am hello
def hello(): return 'Hello, i am '+'hello' test = hello print(test())
Результат выполнения:
Hello, i am hello
def myDecorator(func): ''' Декоратор :param func: декорируемая функция ''' def wrapper(): print('code before') func() print('code after') return wrapper def hello(): print('Hello, i am '+'hello') f = myDecorator(hello) f()
Результат выполнения:
code before
Hello, i am hello
code after
def myDecorator(func): ''' Декоратор :param func: декорируемая функция ''' def wrapper(): print('code before') func() print('code after') return wrapper @myDecorator def hello(): print('Hello, i am '+'hello') hello()
Результат выполнения:
code before
Hello, i am hello
code after
То есть, декораторы в python — это просто синтаксический сахар. При этом, естественно, можно использовать несколько декораторов для одной функции. Также нужно помнить о том, что важен порядок декорирования.
def myDecorator(func): ''' Декоратор :param func: декорируемая функция ''' def wrapper(): title = func() title ='wrap(' + title + ')wrap' return title return wrapper def makeTile(func): def wrapper(): title = func() title = title.capitalize() title = title.replace(',','') return title return wrapper @myDecorator @makeTile def hello(): return 'hello, i am function' print(hello())
Результат выполнения:
wrap(Hello i am function)wrap