En Python tenemos lo que se conoce como decoradores, con ellos seremos capaces de reducir las líneas de código, además, tendremos un código más legible.
Una función puede ser almacenada en una variable, y, puede ser usada como argumento de otra función.
Un decorador es una función que devuelve otra función, cuando estamos trabajando con un decorador trabajamos como mínimo con tres funciones.
Vamos a tener tres funciones, a,b,c, donde “a” recibe como parámetro “b”, y, da salida como “c”.
Un decorador lo podemos usar para una o más funciones.
Veamos un ejemplo simple, en la línea 6, vamos a crear una función, llamada multi, y, en la siguiente línea, imprimimos la multiplicación de 2 por 3.
En la línea 1, vamos a crear el decorador, se crea igual que una función, pero, debemos de pasar un parámetro.
En la siguiente línea, imprimimos el siguiente mensaje:
En la siguiente línea, ponemos el parámetro.
De esta manera, modificamos una función sin tener que modificar sus líneas.
¿Cómo llamamos a un decorador?
Una línea encima de la función que vamos a decorar, ponemos el símbolo de arroba (@) seguido de la función decoradora.
Ejecutamos, y, lo primero que vemos es el mensaje, después, la operación.
Cuando llamamos al decorador, el parámetro función vale en este caso la función multi.
Dentro de la función decorador, después del parámetro voy a poner el siguiente mensaje:
Al ejecutar nos sale el primer mensaje, seguido del cálculo, y, del último mensaje.
He añadido una nueva función llamada división, que realiza una división, y, también he llamado al decorador.
Al ejecutar, aparecen los mensajes en ambas operaciones.
Pero, hemos usado las funciones multi y división sin haber pasado parámetros, pues, vamos a ver como lo hacemos, vamos a función multi, y, añadimos dos parámetros.
Añadimos los mismos parámetros a la función división.
Cambiamos el print de la función suma por valor1*valor2, y, de la función división por valor1/valor2.
Ahora, debemos de indicar al decorador que tenemos parámetros que usar, para ello, debajo de la declaración de la función decorador, creamos otra función, y, pasamos los mismos parámetros que a la función multi y división.
En el parameto funcion, añadimos los mismos parámetros.
En la siguiente línea, retornamos interior.
Añadimos los parámetros valor1 y valor2 a las funciones multi y división.
En la línea print de la función multi, ponemos valor1*valor2, y, en el print de la función división, ponemos valor1/valor2.
Como ultimas líneas, llamamos a la función multi, pasando el valor para los parámetros, lo mismo para la función división.
Probemos.
Pero, que ocurre si queremos pasar otro parámetro, pues, que debemos de añadirlos, cosa que puede ser un poco pesada, pues, vamos a usar la declaración *args, esto quiere decir que acepta cualquier numero de parámetros, lo debemos de poner en la función interior, y, en el parámetro.
Voy a añadir un parámetro más a la función multi, y, en la llamada a la función multi, añadimos el valor para dicho parámetro.
Si ejecutamos vemos que el calculo de realiza sin problemas.
Voy a modificar la llamada a multi, como sigue:
Donde estamos usando una palabra clave, si ejecutamos nos devuelve un error de Obtuve un argumento de palabra clave inesperado.
Por lo que ya no nos sirve la secuencia args, debemos de añadir *kwargs, como sigue:
Ejecutamos y ya nos devuelve el resultado.
Miguel Angel Franco
Comments