Un decorador es un invocable que se usa para ampliar la funcionalidad de otros invocables. En palabras simples, te permite “decorar” una función con otra función. El símbolo «@» en este contexto a veces se denomina sintaxis circular para un decorador. La sintaxis circular facilita el acceso y la ampliación.
Desde entonces, ya teníamos decoración con staticmethod() y classmethod(). Entonces, una definición de función puede estar envuelta por una o más expresiones decoradoras. Las expresiones de decorador se evalúan cuando se define la función, en el ámbito que contiene la definición de la función. El resultado debe ser invocable, que se invoca con el objeto de función como único argumento. El valor devuelto está vinculado al nombre de la función en lugar del objeto de la función. Se pueden aplicar varios decoradores de forma anidada.
Sintaxis:
(Pie_syntax) <decorator_name> any_callable
Ejemplo:
@gfg
definitivamente frikis():
.
.
Para los casos en los que las asignaciones repetitivas y las instrucciones de llamada parecen inútiles, la sintaxis circular es un salvavidas. Podemos simplemente nombrar la función de decoración después del símbolo @, y poner esto antes de la función para decorar.
Los siguientes programas te ayudarán a entender esto mejor:
Programa 1:
Python3
# defining the decorator def decor(func): print("#----------------#") func() print("#----------------#") # using the decorator @decor def main(): print("$ GeeksforGeeks $") if __name__ == 'main': main()
Producción:
#—————-#
$GeeksforGeeks $
#—————-#
Sintaxis circular de enstringmiento
También podemos tener varios decoradores en una función, no necesariamente uno solo . Pero es importante tener en cuenta el orden de los decoradores. El orden en que se llamará a los decoradores afectará directamente a la salida.
Programa 2:
Python3
# defining the 1st decorator def decor1(func): print("_________________") # defining the 2nd decorator def decor2(func): print("$****************$") func() print("$****************$") # using the decorator @decor1 @decor2 def main(): print("$ GeeksforGeeks $") # Driver program to test the code if __name__ == 'main': main()
Producción:
$****************$
$GeeksforGeeks $
$****************$
_________________
Publicación traducida automáticamente
Artículo escrito por deepapandey364 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA