En Python, una función es una estructura muy flexible, podemos asignarla a una variable, pasarla como argumento a otra función o usarla como salida de una función. El decorador en Python también es una función, que es una función de orden superior diseñada para mejorar la función de la función y hacerla más flexible y escalable.
¿Qué son los decoradores?
Un decorador es una característica del lenguaje Python que permite a los usuarios modificar de forma dinámica y transparente el comportamiento de la función o aumentar la funcionalidad de la función sin modificar el código de la función original. Un decorador es esencialmente una función que acepta otras funciones como argumentos y devuelve una nueva función.
Sintaxis de decoradores
@decorador
def foo()
aprobar
Entre ellos, decorador es una función decoradora y foo es una función ordinaria. Al usar la sintaxis @decorator, el intérprete de Python pasará automáticamente la función foo a la función decoradora y asignará el valor de retorno de la función decoradora a la función foo, de modo que podamos llamar a la función transformada llamando a la función foo.
Escenarios de aplicación de decoradores.
Los escenarios de aplicación de los decoradores son muy extensos e incluyen, entre otros, los siguientes aspectos:
1. Registro
Podemos usar el decorador para registrar el registro de ejecución de la función para una mejor depuración y análisis.
def registro(función):
def arapper(*args,**kwargs):
print(f"caaling {func._name_} with args={args},kwargs={kwargs}")
función de retorno(*args, **kwargs)
envoltorio de devolución
@registro
def suma(x,y):
volver x + y
add(1,2) #output llamando add with args=(1,2),kwargs={}
# salida 3
2. Autenticación y autorización
Podemos implementar funciones de autenticación y autorización de usuarios a través de decoradores para garantizar que solo los usuarios autorizados puedan acceder a recursos específicos.
def autenticar(función):
envoltorio def(*args, **kwargs):
si está autenticado:
función de retorno(*args, **kwargs)
demás:
generar excepción ("no autorizado")
envoltorio de devolución
@autenticar
def get_secret_date():
aprobar
3. caché
Podemos implementar la función de almacenamiento en caché a través de decoradores para reducir la sobrecarga computacional y mejorar el rendimiento.
caché = {}
def memorizar(función):
envoltura de definición(*argumentos):
si argumentos en caché:
devolver caché [argumentos]
demás:
resultado = func(*argumentos)
caché[argumentos] = resultado
resultado devuelto
envoltorio de devolución
@memoizar
def fib(n)
si n < 2
regreso m
demás:
devolver fib(n-1) + fib(n-2)