Los siguientes son hechos importantes sobre las funciones en Python que son útiles para comprender las funciones de decorador.
- En Python, podemos definir una función dentro de otra función.
- 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
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