Definição: Decorador é um padrão de design em Python. É uma função que tem outra função como argumento, adicione alguma funcionalidade a ela sem modificá -la e retorna outra função.
Isso é chamado usando "(@)" e colocado antes de definir uma função que queremos decorar.
sintaxe:
@Decorator Nome
Definição da função
Para entender os decoradores, precisamos saber os conceitos abaixo.
Funções são objetos de primeira classe. Isso significa que uma função pode ser passada como um argumento, pode ser retornada de outra função, pode ser atribuída a uma variável, pode ser definida em outra função. Para uma melhor compreensão, veja os exemplos abaixo.
Aqui a função de incremento passou como um argumento
Exemplo 1.PY:
Saída:
>> Python Exemplo1.py
Exemplo2.PY:
Saída:
>> Python Exemplo2.py
Aqui Say_Wish Função retornou da função de desejo
Exemplo3.PY:
Saída:
>> Python Exemplo3.py
Exemplo4.PY:
Saída:
>> Python Exemplo4.py
Fecho:
O Python permite que uma função aninhada acesse o escopo externo da função de anexo.
Def saudação (mensagem):Exemplo5.PY:
Saída:
>> Python Exemplo5.py
Depois de entender os conceitos acima agora, escreveremos um exemplo de decorador.
Ex1: Aqui, decoraremos a função de mensagem. Imprimindo a msg dentro **** sem modificar a função original, i.e., função de mensagem.
#Decorator StartExemplo6.PY:
Saída:
>> Python Exemplo6.py
Na forma mais simples, podemos colocar o decorador em cima da definição da função e chamar a função como mostrado abaixo:
Aqui, qualquer corda que queremos decorar dentro ***, use este decorador.
Saída:
Decorador múltiplo:
Podemos ter um decorador múltiplo para uma única função. Aqui o decorador é aplicado na ordem que chamamos.
sintaxe:
@decorator2
@decorator1
Definição da função
Aqui o 1º Decorador será aplicado, então o 2º decorador.
Passando argumentos para as funções do decorador:
Podemos passar argumentos para a função de invólucro. Os argumentos passados para a função para a qual queremos decorar.
Ex:
def déco_wish (função):Exemplo7.PY:
Saída:
>> Python Exemplo7.py
Passe o número variável de argumentos para a função do decorador:
Podemos passar por qualquer número de argumentos usando *args (argumentos não-chave como números) e ** kwargs (argumentos de palavras-chave como um dicionário). Ambos são argumentos posicionais e armazenam os argumentos nas variáveis Args e Kwargs.
Nota: Aqui, podemos usar qualquer nome em vez de args e kwargs, mas esses nomes são recomendados para usar.
Ex:
DEF DEC_VAR_ARGS (FUNÇÃO):Exemplo8.PY:
Saída:
>> Python Exemplo8.py
Ex2: suponha que tenhamos 2 função
Função1: calcule a soma dos números da lista dada
Função2: multiplique cada número por 2 e adicione -os à lista fornecida de números
Se quisermos calcular o tempo gasto por cada uma para execução, pode fazê -lo de 2 maneiras
Veja o código abaixo resolvido usando o decorador:
#Decorator StartExemplo9.PY:
Saída:
>> Python Exemplo9.py
O decorador acima pode ser usado para calcular o tempo de execução para qualquer uma das funções. Ao usar um decorador, podemos evitar o código repetido quando temos um requisito para calcular o tempo de execução para colocar o decorador acima da definição da função.
Conclusão:
Os decoradores mudam a funcionalidade de uma função/método sem alterar o código original da função está sendo decorado. Usando isso, podemos evitar escrever código repetido. Conhecer o conceito de decorador nos tornará fortes no Python. Podemos usar o decorador nos casos abaixo: