Python – Sintaxis circular (@)

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

Deja una respuesta

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