Decoradores en Python

Decoradores en Python
Los decoradores de Python son una característica extremadamente útil, ya que permiten que los programadores personalicen cómo se comporta un método o clase. Los decoradores nos permiten encapsular otra función para modificar su funcionalidad temporalmente mientras extienden la funcionalidad del método envuelto. Primero comprendamos algunos conceptos que serían útiles mientras aprendemos sobre los decoradores antes de que nos metamos demasiado en ellos.

Cuándo utilizar un decorador de Python

Siempre que desee alterar el comportamiento de una función sin cambiar el método en sí, utilizará un decorador. Agregar registros, analizar el rendimiento, ejecutar almacenamiento en caché, confirmar la autorización y otras tareas son algunos ejemplos notables. Siempre que necesite ejecutar un código idéntico en muchos procesos, puede emplear uno. No tendrá que escribir los programas duplicados como resultado.

Prerrequisitos para comprender los decoradores

Necesitamos entender primero algunos conceptos fundamentales de Python antes de conocer los decoradores.

    • Las funciones se pueden emplear o proporcionar como parámetros en Python porque se comportan como clases y objetos.
    • Un elemento del tipo de objeto es una función.
    • La función podría conservarse en una variable.
    • La función se usa como argumento en otra función.
    • Los usuarios pueden devolver otro método de una función.
    • Podrían mantenerse en estructuras de datos como matrices y tablas de hash.

Para una buena comprensión, considere las siguientes instancias:

Ejemplo 1:

Trataremos las funciones como objetos en este caso. Le daremos una variable al método de grito. Esto genera un segundo nombre, grita que apunta al objeto de función especificado por el método de grito pero no llama a la función.


Al comienzo del programa, definimos la función Shout (). Aquí, pasamos el atributo "T" como el parámetro de la función Shout (). Esta función devuelve el texto en el formato superior. Usamos la función superior (). Luego, llamamos al método print () para mostrar la línea. Dentro de esta función, llamamos a la función Shout (). Proporcionamos el texto que queremos aparecer en la pantalla como salida. Establecemos el valor de la función grito () igual a la función Yell (). En la última línea, imprimimos el valor del método de grito, por lo que aplicamos el método print (). Aquí, también especificamos el valor de "buenos días" como el argumento de la función YEl ().

Ejemplo 2:

Proporcionaremos el método a otra función como parámetro. Aquí, el método de salud acepta una segunda función como argumento (gritar y susurrar). La función de salud luego llama a otras funciones definidas que se especificaron como una entrada.


La función Shout () se define al comienzo del programa. Aquí, el argumento para la función de grito es el elemento "t". Esto devuelve el texto en la caja superior porque utilizamos la función superior (). El método Whisper () se define en el siguiente paso. Esta función genera el texto que se pasó como un argumento en el formato inferior. El método greet () ahora se usa. Aquí, proporcionamos el parámetro "func" que se define en la siguiente línea. Especificamos el valor del atributo "func" que tenemos que representar en la consola. Finalmente, empleamos la función print () para mostrar los valores de los métodos de grito y susurro.


Las instancias que se mencionan anteriormente muestran los conceptos principales que se requieren para comprender los decoradores. Ahora, ejecutaremos algunos casos para demostrar el uso de decoradores.

Decoradores

Como ya se dijo, los decoradores se pueden utilizar para cambiar una función o comportamiento de clase. Las funciones se definen dentro de la función de envoltorio cuando se usan decoradores, donde se pasan como parámetros a otras funciones.

Ejemplo 3:

Esta ilustración puede ilustrar cómo un decorador altera el comportamiento de una función.


En primer lugar, definimos el decorador. A continuación, llamamos a la función inner1 (). Es un método de envoltura en el que se llama el parámetro. Dentro de esta función, utilizamos la función print (). Luego, llamamos a la función real dentro de la función de envoltorio. Nuevamente empleamos el método print ().en la siguiente línea. Definimos un método fun_used () para llamarse dentro del envoltorio. Ahora, pasamos el "Fun_used" dentro del decorador para modificar su comportamiento. Para terminar el código, invocamos el método.

Ejemplo 4:

Pasemos a una instancia diferente en la que podemos determinar cuánto tiempo lleva una función para ejecutar utilizando un decorador.


Aquí, importamos los archivos de encabezado requeridos que incluyen tiempo y matemáticas. La biblioteca "Time" es responsable de calcular el módulo "tiempo" y el módulo "matemático" es responsable de todas las operaciones matemáticas. Utilizamos un decorador para calcular la duración tomada por la función. Definimos el método cal_time (). Esta función contiene cualquier función requerida como parámetro. Empleamos la función inner1 (). Proporcionamos los *args y ** kwargs como argumentos de la función. En el siguiente paso, almacenamos la duración antes de implementar la función. Llamamos al método Time () asociado con el módulo "Tiempo". Luego, adquirimos el tiempo después de ejecutar el método. Nuevamente utilizamos la función Time () y su valor se guarda en la variable "Fin".

El método print () se aplica para mostrar el tiempo calculado. Ahora, calculamos el factorial para que definamos el método factorial (). Pasamos el número específico como su parámetro. Establecemos un valor de 3 segundos para la función Sleep () porque lleva muy poco tiempo para que podamos notar la diferencia real. Se emplea la función print () para mostrar el factorial del número. Al final, invocamos el factorial al proporcionar el número del cual queremos calcular el factorial.

Conclusión

En esta guía, discutimos cómo proporcionar una función a una variable, cómo tratar las funciones como objetos, cómo devolver las funciones y cómo proporcionar una función como parámetro para otra función. Junto con varios casos, también demostramos cómo construir y utilizar los decoradores de Python. Implementamos el código que emplea a los decoradores para cambiar el comportamiento de una función. Y en otra ilustración, utilizamos un decorador para determinar cuánto tiempo lleva una función para ejecutar.