Notas de Python: decoradores de Python
Un decorador es una función decorativa que modifica algunas partes de la función original sin modificar la función original. Se puede utilizar en muchos escenarios, como ① antes de ejecutar un determinado caso de prueba. iniciar sesión o realizar ciertas operaciones específicas; ② contar el tiempo de ejecución de una determinada función; ③ determinar la legalidad de la entrada, etc. El uso razonable de decoradores puede mejorar en gran medida la legibilidad y la eficiencia operativa del programa. Este artículo presentará el uso de decoradores de Python.
El decorador de Python se puede definir de la siguiente manera:
Salida:
El intérprete de Python pasa la función test_decorator como parámetro a la función my_decorator y apunta al función interna wrapper() , la función interna wrapper() a su vez llamará a la función original test_decorator() Por lo tanto, cuando se ejecuta decorator(), primero se imprimirá "este es el contenedor" y luego "hola mundo". impreso Una vez completado test_decorator(), se imprimirá "bye", *args y **kwargs, lo que indica que acepta cualquier número y tipo de argumentos.
El decorador my_decorator() encapsula la función test_decorator() que realmente necesita ser ejecutada y cambia su comportamiento, pero la función original test_decorator() permanece sin cambios.
La forma habitual de utilizar decoradores es la siguiente:
@my_decorator es equivalente a la declaración decorador = my_decorator(test_decorator).
El decorador incorporado @functools.wrap se puede utilizar para conservar la metainformación de la función original (obtenga la metainformación de la función original y cópiela en la función decoradora correspondiente). Veamos la situación sin herramientas funcionales:
Salida:
En la salida anterior, puede ver que después de decorar la función test_decorator(), la metainformación se envuelve mediante wrapper( ) reemplazo de funciones. Puede utilizar el decorador @functools.wrap para conservar la metainformación de la función original:
Salida:
El decorador puede aceptar parámetros personalizados. Por ejemplo, defina un parámetro para establecer el número de ejecuciones de la función interna del decorador:
Salida:
Python admite el anidamiento de varios decoradores:
Proceso de decoración:
El orden de ejecución es de adentro hacia afuera:
El orden de ejecución de test_decorator('hello world') es lo opuesto al proceso de decoración.
Salida:
Las clases también se pueden usar como decoradores. Los decoradores de clases dependen en gran medida del método __call__(), que son todos los objetos en Python que se pueden llamar. en métodos (métodos mágicos de Python) que se ejecutan cada vez que se llama a una instancia de una clase.
La siguiente implementación del decorador de clases cuenta el número de veces que se ejecuta una función:
Salida:
Los siguientes son dos casos de uso de este decorador: p >
Calcule el tiempo de ejecución de la función
Salida:
Al utilizar algunos servicios web, debe determinar si el usuario ha iniciado sesión. Si el usuario no lo está iniciado sesión, vaya a la página de inicio de sesión. O solicitar al usuario que inicie sesión:
--THE END--