Decoradores de funciones en Python | Serie 1 (Introducción)

Fondo

Los siguientes son hechos importantes sobre las funciones en Python que son útiles para comprender las funciones de decorador.

  1. En Python, podemos definir una función dentro de otra función.
  2. En Python, una función se puede pasar como parámetro a otra función (una función también puede devolver otra función).
# A Python program to demonstrate that a function
# can be defined inside another function and a
# function can be passed as parameter.
  
# Adds a welcome message to the string
def messageWithWelcome(str):
  
    # Nested function
    def addWelcome():
        return "Welcome to "
  
    # Return concatenation of addWelcome()
    # and str.
    return  addWelcome() + str
  
# To get site name to which welcome is added
def site(site_name):
    return site_name
  
print messageWithWelcome(site("GeeksforGeeks"))

Producción:

Welcome to GeeksforGeeks

Decorador de funciones

Un decorador es una función que toma una función como su único parámetro y devuelve una función. Esto es útil para «envolver» la funcionalidad con el mismo código una y otra vez. Por ejemplo, el código anterior se puede reescribir de la siguiente manera.

Usamos @func_name para especificar un decorador que se aplicará en otra función.

# Adds a welcome message to the string
# returned by fun(). Takes fun() as
# parameter and returns welcome().
def decorate_message(fun):
  
    # Nested function
    def addWelcome(site_name):
        return "Welcome to " + fun(site_name)
  
    # Decorator returns a function
    return addWelcome
  
@decorate_message
def site(site_name):
    return site_name;
  
# Driver code
  
# This call is equivalent to call to
# decorate_message() with function
# site("GeeksforGeeks") as parameter
print site("GeeksforGeeks")

Producción:

Welcome to GeeksforGeeks

Los decoradores también pueden ser útiles para adjuntar datos (o agregar atributos) a las funciones.

# A Python example to demonstrate that
# decorators can be useful attach data
  
# A decorator function to attach
# data to func
def attach_data(func):
       func.data = 3
       return func
  
@attach_data
def add (x, y):
       return x + y
  
# Driver code
  
# This call is equivalent to attach_data()
# with add() as parameter
print(add(2, 3))
  
print(add.data)

Producción:

5
3

‘add()’ devuelve la suma de x e y pasados ​​​​como argumentos, pero está envuelto por una función de decorador, llamar a add (2, 3) simplemente daría la suma de dos números, pero cuando llamamos a add.data, entonces la función ‘add’ es pasó a la función de decorador ‘adjuntar_datos’ como argumento y esta función devuelve la función ‘agregar’ con un atributo ‘datos’ que se establece en 3 y, por lo tanto, lo imprime.

Los decoradores de Python son una herramienta poderosa para eliminar la redundancia.

Consulte Decoradores en Python para obtener más detalles.

Este artículo es una contribución de Shwetanshu Rohatgi . Escriba comentarios si encuentra algo incorrecto o si desea compartir más información sobre el tema tratado anteriormente.

Publicación traducida automáticamente

Artículo escrito por GeeksforGeeks-1 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *