Background
A seguir estão fatos importantes sobre funções em Python que são úteis para entender as funções do decorador.
- Em Python, podemos definir uma função dentro de outra função.
- Em Python, uma função pode ser passada como parâmetro para outra função (uma função também pode retornar outra função).
# Um programa Python para demonstrar que uma função # pode ser definida dentro de outra função e uma # função pode ser passada como parâmetro. # Adiciona uma mensagem de boas-vindas à string def messageWithWelcome(str): # Função aninhada def addWelcome(): return "Bem-vindo a " # Retorna a concatenação de addWelcome() e str return addWelcome() + str # Para obter o nome do site ao qual as boas-vindas são adicionadas def site(site_name): return site_name print(messageWithWelcome(site("Acervo Lima")))
Resultado:
Bem-vindo a Acervo Lima
Decorador de Função
Um decorador é uma função que recebe uma função como seu único parâmetro e retorna uma função. Isso é útil para “embrulhar” a funcionalidade com o mesmo código repetidamente. Por exemplo, o código acima pode ser reescrito da seguinte forma.
Usamos @func_name
para especificar um decorador a ser aplicado em outra função.
# Adiciona uma mensagem de boas-vindas à string # retornado por fun(). Pega fun() como # parâmetro e retorna welcome(). def decorate_message(fun): # Função aninhada def addWelcome(site_name): return "Bem-vindo ao " + fun(site_name) # O decorador retorna uma função return addWelcome @decorate_message def site(site_name): return site_name; # Esta chamada é equivalente a chamar # decorate_message() com função # site("Acervo Lima") como parâmetro print(site("Acervo Lima"))
Resultado:
Bem-vindo ao Acervo Lima
Decoradores também podem ser úteis para anexar dados (ou adicionar atributos) às funções.
# Um exemplo Python para demonstrar que # decoradores podem ser úteis para anexar dados # Uma função de decorador para anexar # dados para func def attach_data(func): func.data = 3 return func @attach_data def add (x, y): return x + y # Esta chamada é equivalente a attach_data() # com add() como parâmetro print(add(2, 3)) print(add.data)
Resultado:
5 3
'add()
' retorna a soma de x
e y
passada como argumentos, mas é envolvida por uma função decoradora, chamar add(2, 3)
simplesmente forneceria a soma de dois números, mas quando chamamos add.data
, a função 'add
' é passado para a função de decorador 'attach_data
' como argumento e esta função retorna a função 'add
' com um atributo 'data
' que é definido como 3 e, portanto, imprime-o.
Artigo escrito por Shwetanshu Rohatgi e traduzido por Acervo Lima de Function Decorators in Python | Set 1 (Introduction)
0 comentários:
Postar um comentário