Vamos finalmente escrever nosso próprio decorador.
Lembre-se, um decorador sobrecarrega nossa função.
É simplesmente uma função que envolve outra função e a aprimora ou altera, mas a melhor maneira de explicar
o que é é codificar a nossa própria.
Então vamos fazer isso.
Vamos definir um meu.
Decorator e este decorador vão aceitar uma função imediatamente, devemos saber que esta é uma
função de ordem superior agora aqui.
Dentro daqui, vamos chamar a função, mas antes de fazermos isso, vamos envolver essa
função em outra função.
Então, vamos dizer para definir a função de agrupamento.
Portanto, este é apenas um invólucro e esta função de invólucro.
Vai ser uma função que simplesmente executa esse funk e então finalmente retorna o envoltório.
Função e observe aqui que não estou chamando, estou apenas devolvendo para que mais tarde alguém possa usá-la.
OK, agora digamos que temos uma função simples, olá, e esta função simples, apenas príncipe.
Olá, que função inútil.
Agora, por que isso é útil, porque agora eu posso usar isso como decorador Python, assim que escrevermos um A antes disso vai dizer,
ei, isso vai ser um decorador e o decorador, contanto que sigamos a sintaxe
de aceitar uma função, ter uma função de invólucro, chamar a função e retornar a função
de invólucro pode ser usada.
Então, se eu fizer meu decorador, veja como é todo azul.
Agora, este decorador pode realmente ser usado no topo ao definir nossas funções, então se quisermos usar meu decorador
na função hello, nós o usaremos assim para quando eu chamar hello next no meu programa.
Eu clico, corro.
Eu recebo oi.
OK, eu sei o que você está pensando, você está pensando que isso é uma completa perda de tempo, Andre.
Por que eu tive que fazer tudo isso?
Eu poderia ter feito isso apenas para encontrar o olá.
E foi só isso.
Estou tão confuso.
Bem, aqui está a coisa.
O que acabamos de fazer com o decorador.
Não mudou nada.
Funciona exatamente como esperado.
Mas o que nos permite fazer é que agora podemos adicionar funcionalidades extras.
Lembre-se de como eu disse que decorador é uma função como meu decorador, que envolve aqui outra função, que é
a função que passamos.
E o aprimora, então como podemos melhorar o olá?
Bem, podemos fazer qualquer coisa dentro dessa função agrupada, por exemplo, posso dizer imprimir
e então imprimiremos algumas estrelas aqui e talvez imprimir.
Outro conjunto de estrelas aqui é quando eu ligar para Ron.
Boom, acabamos de impulsionar nosso olá.
Função.
Quão legal é isso?
E é por isso que os decoradores são úteis apenas adicionando esta linha, sou capaz de superestimar uma função de forma que
digamos que eu crie outra função chamada.
Em e esta compra vai ser impressa.
Te vejo mais tarde.
Ligando aqui e clicando em executar.
Bem, nada muda, mas se eu quiser superestimá-lo, assim como o hello, tudo que eu preciso fazer
é apenas copiar o decorador e usá-lo aqui também para que, se eu o executar.
Lá vamos nós, super impulsionamos nosso.
Este é o poder do decorador, simplesmente usando esta sintaxe, posso adicionar funcionalidade extra a outras
funções.
Agora, eu sei o que você está pensando e também sempre digo isso, é como se eu pudesse ler mentes,
mas.
Você está pensando que isso é muita mágica, como o interpretador Python faz tudo isso?
Parece, bem, mágica, certo?
Por baixo do capô, tudo vai bem, deixe-me mostrar a vocês, com base no que aprendemos até agora
sobre funções, porque são cidadãos de primeira classe, certo?
Tudo o que estamos fazendo é literalmente isso.
Estamos dizendo a variável A.
É igual a olá.
E embrulhar este olá e chamá-lo com meu decorador.
Estou dizendo meu decorador.
E depois disso, estou executando um assim.
Então, digamos que este foi um olá para o bem, estou apenas executando isso.
Igual a.
Então, se eu executar isso.
Tudo ainda funciona.
Tudo o que estou fazendo é embrulhar minha função hello.
Com meu decorador e atribuindo-o a uma variável.
Então, se formos passo a passo, veremos que meu decorador recebe uma função em nosso caso,
a função hello, ele retorna esta função reenvolvida que contém hello aqui.
Portanto, retornamos esta função de rato.
Então, hello to now é igual a esta função agrupada e, em seguida, esta função agrupada é chamada.
E como é chamado.
Bem, ele imprime isso, executa a função hello e, em seguida, imprime isso.
É o mesmo que fazer algo assim.
Simplesmente chamaremos de novo se eu executar isso.
Funciona, parece estranho, não é, mas deveria fazer sentido.
Estamos chamando a primeira função e a primeira retorna outra função e, em seguida, chamamos a próxima
função retornada, que é a função rep.
Agora, o motivo pelo qual os decoradores são úteis é porque, em vez de fazer isso e, francamente, parecer
confuso, posso apenas adicionar o no meu decorador e não precisamos fazer tudo isso.
Ah, olá.
É automaticamente embrulhado pelo meu decorador.
Mas, essencialmente, é isso que a atribuição está fazendo.
Veja, nada de mágico nisso.
Agora, isso é bom, mas aposto que você ainda está se perguntando por que os decoradores são úteis.
Então, para realmente finalizar nosso entendimento sobre decorador, vamos fazer uma pausa e te vejo no
próximo vídeo.