fundo

A seguir estão fatos importantes sobre funções em Python que são úteis para entender as funções do decorador.
  1. Em Python, podemos definir uma função dentro de outra função.
  2. 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).
def messageWithWelcome(str): 
  
    
    def addWelcome(): 
        return "Welcome to "
  
    
    
    return  addWelcome() + str
def site(site_name): 
    return site_name 
  
print messageWithWelcome(site("GeeksforGeeks")) 

Resultado:

Bem-vindo ao GeeksforGeeks
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.

def decorate_message(fun): 
  
    
    def addWelcome(site_name): 
        return "Welcome to " + fun(site_name) 
  
    
    return addWelcome 
  
@decorate_message
def site(site_name): 
    return site_name; 
  
  
print site("GeeksforGeeks") 

Resultado:



Bem-vindo ao GeeksforGeeks

Decoradores também podem ser úteis para anexar dados (ou adicionar atributos) às funções.

def attach_data(func): 
       func.data = 3
       return func 
  
@attach_data
def add (x, y): 
       return x + y 
  
print(add(2, 3)) 
  
print(add.data) 

Resultado:

5
3

'add()' retorna a soma de xey 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 'adicionar' com um atributo 'dados' que é definido como 3 e, portanto, imprime-o.

Os decoradores Python são uma ferramenta poderosa para remover redundâncias.

Consulte Decoradores em Python para mais detalhes.

Este artigo é uma contribuição de Shwetanshu Rohatgi . Escreva comentários se encontrar algo incorreto ou se quiser compartilhar mais informações sobre o tópico discutido acima