Red de conocimiento informático - Problemas con los teléfonos móviles - Notas de Python: decoradores de Python

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:

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--