Decoradores em Python

Decoradores em Python
Os decoradores de Python são um recurso extremamente útil, pois permitem que os programadores personalizem como um método ou classe se comporta. Os decoradores nos permitem encapsular outra função para modificar sua funcionalidade temporariamente, estendendo a funcionalidade do método embrulhado. Vamos primeiro compreender alguns conceitos que seriam úteis enquanto aprendem sobre os decoradores antes de nos aprofundarmos muito.

Quando utilizar um decorador de Python

Sempre que você quiser alterar o comportamento de uma função sem alterar o próprio método, você utilizará um decorador. Adicionando toras, analisando o desempenho, executando o cache, confirmação da autorização e outras tarefas são alguns exemplos notáveis. Sempre que você precisar executar um código idêntico em muitos processos, você pode, no entanto, empregar um. Você não terá que escrever os programas duplicados como resultado.

Pré -requisitos para entender os decoradores

Precisamos entender primeiro alguns conceitos fundamentais do Python antes de aprendermos sobre decoradores.

    • As funções podem ser empregadas ou fornecidas como parâmetros em python porque se comportam como classes e objetos.
    • Um elemento do tipo de objeto é uma função.
    • A função pode ser retida em uma variável.
    • A função é usada como argumento em outra função.
    • Os usuários podem retornar outro método de uma função.
    • Eles podem ser mantidos em estruturas de dados como matrizes e tabelas de hash.

Para um bom entendimento, considere as seguintes instâncias:

Exemplo 1:

Vamos tratar as funções como objetos neste caso. Vamos dar uma variável ao método de grito. Isso gera um segundo nome, grite que aponta para o objeto de função que é especificado pelo método de grito, mas não chama a função.


No início do programa, definimos a função shout (). Aqui, passamos o atributo "T" como o parâmetro da função shout (). Esta função retorna o texto no formato superior. Usamos a função superior (). Em seguida, chamamos o método print () para exibir a linha. Dentro desta função, chamamos a função shout (). Fornecemos o texto que queremos aparecer na tela como saída. Definimos o valor da função shout () igual à função Yell (). Na última linha, imprimimos o valor do método Yell para que apliquemos o método print (). Aqui, também especificamos o valor do "bom dia" como o argumento da função Yell ().

Exemplo 2:

Forneceremos o método a outra função como um parâmetro. Aqui, o método saudável aceita uma segunda função como um argumento (grito e sussurro). A função Greet chama outras funções definidas que foram especificadas como uma entrada.


A função Shout () é definida no início do programa. Aqui, o argumento da função de grito é o elemento "T". Isso oferece o texto de volta na caixa superior porque utilizamos a função superior (). O método Whisper () é definido na seguinte etapa. Esta função gera o texto que foi passado como um argumento no formato inferior. O método greet () agora é usado. Aqui, fornecemos o parâmetro "func" que é definido na linha a seguir. Especificamos o valor do atributo "func" que precisamos representar sobre o console. Finalmente, empregamos a função print () para mostrar os valores dos métodos de grito e sussurro.


As instâncias mencionadas anteriormente mostram os principais conceitos necessários para compreender os decoradores. Agora, executaremos algumas instâncias para demonstrar o uso de decoradores.

Decoradores

Como já foi dito, os decoradores podem ser utilizados para mudar um comportamento de uma função ou classe. As funções são definidas na função do invólucro ao usar decoradores, onde são passados ​​como parâmetros para outras funções.

Exemplo 3:

Esta ilustração pode ilustrar como um decorador altera o comportamento de uma função.


Primeiro de tudo, definimos o decorador. Em seguida, chamamos a função Inner1 (). É um método de invólucro no qual o parâmetro é chamado. Dentro desta função, utilizamos a função print (). Em seguida, chamamos a função real dentro da função de wrapper. Nós empregamos novamente o método print ().Na próxima linha. Definimos um método FUN_USED () a ser chamado dentro do invólucro. Agora, passamos pelo "Fun_Used" dentro do decorador para modificar seu comportamento. Para encerrar o código, invocamos o método.

Exemplo 4:

Vamos passar para uma instância diferente na qual podemos determinar quanto tempo leva uma função para executar utilizando um decorador.


Aqui, importamos os arquivos de cabeçalho necessários que incluem tempo e matemática. A biblioteca "Time" é responsável por calcular o "tempo" e o módulo "matemática" é responsável por todas as operações matemáticas. Utilizamos um decorador para calcular a duração tomada pela função. Definimos o método cal_time (). Esta função contém qualquer função necessária como um parâmetro. Empregamos a função Inner1 (). Fornecemos os *args e ** kwargs como os argumentos da função. Na próxima etapa, armazenamos a duração antes de implementar a função. Chamamos o método Time () associado ao módulo "tempo". Então, adquirimos o tempo depois de executar o método. Utilizamos novamente a função de tempo () e seu valor é salvo na variável "final".

O método print () é aplicado para mostrar o tempo calculado. Agora, calculamos o fatorial para definir o método fatorial (). Passamos o número específico como seu parâmetro. Definimos um valor de 3 segundos para a função Sleep () porque leva muito pouco tempo para que possamos notar a diferença real. A função print () é empregada para exibir o fatorial do número. No final, invocamos o fatorial, fornecendo o número do qual queremos calcular o fatorial.

Conclusão

Neste guia, discutimos como fornecer uma função a uma variável, como tratar as funções como objetos, como retornar funções e como fornecer uma função como um parâmetro para alguma outra função. Juntamente com várias instâncias, também demonstramos como construir e utilizar os decoradores do Python. Implementamos o código que emprega os decoradores para alterar o comportamento de uma função. E em outra ilustração, usamos um decorador para determinar quanto tempo leva uma função para executar.