Ejercicios con decoradores
Enunciado del Ejercicio: Registro de Tiempo de Ejecución
Desarrolla un decorador en Python llamado registro_tiempo que registre el tiempo de ejecución de una función y muestre el tiempo transcurrido en segundos después de que la función haya terminado de ejecutarse. Luego, aplica este decorador a una función llamada operacion_larga que simula una operación que toma un tiempo significativo en ejecutarse.
El programa debe incluir las siguientes funcionalidades:
-
Definir el decorador
registro_tiempoque recibe una función como argumento y registra el tiempo de ejecución de esa función. -
Aplicar el decorador
registro_tiempoa la funciónoperacion_larga. -
Definir la función
operacion_largaque simula una operación que toma un tiempo significativo en ejecutarse (por ejemplo, una función que suma todos los números de 1 a un número grande). -
Llamar a la función
operacion_largay observar el tiempo de ejecución registrado por el decorador.
Ejemplo de interacción con el programa:
Tiempo de ejecución de la función 'operacion_larga': 5.823476 segundos
En este ejemplo, el programa ejecutó la función operacion_larga y registró el tiempo de ejecución de la operación. Luego, mostró el tiempo transcurrido en segundos.
Enunciado del Ejercicio: Validación de Argumentos
Desarrolla un decorador en Python llamado validar_argumentos que valide los argumentos de entrada de una función antes de ejecutarla. El decorador debe recibir una función como argumento y una lista de tipos de datos esperados para los argumentos de la función. Si los tipos de datos de los argumentos proporcionados no coinciden con los tipos de datos esperados, el decorador debe lanzar una excepción TypeError. Luego, aplica este decorador a una función llamada dividir que realiza la división de dos números.
El programa debe incluir las siguientes funcionalidades:
-
Definir el decorador
validar_argumentosque recibe una función y una lista de tipos de datos esperados como argumentos, y valida los tipos de datos de los argumentos de la función antes de ejecutarla. -
Aplicar el decorador
validar_argumentosa la funcióndividir. -
Definir la función
dividirque toma dos números como argumentos y realiza la división. -
Llamar a la función
dividircon argumentos de tipos incorrectos y observar la excepción generada por el decorador.
Ejemplo de interacción con el programa:
Ingrese el primer número: 10
Ingrese el segundo número: '5'
TypeError: Se esperaba un argumento de tipo <class 'int'>, pero se recibió un argumento de tipo <class 'str'>
En este ejemplo, el programa llamó a la función dividir con un argumento de tipo incorrecto ('5' en lugar de 5) y el decorador validar_argumentos generó una excepción TypeError indicando que se esperaba un argumento de tipo int pero se recibió un argumento de tipo str.
Enunciado del Ejercicio: Autenticación de Usuario
Desarrolla un decorador en Python llamado autenticar_usuario que simule la autenticación de usuarios antes de ejecutar una función que realiza una operación sensible. El decorador debe solicitar al usuario que ingrese un nombre de usuario y una contraseña antes de ejecutar la función. Si el nombre de usuario y la contraseña ingresados coinciden con los valores predefinidos, la función se ejecutará. De lo contrario, el decorador debe imprimir un mensaje de error y la función no se ejecutará.
El programa debe incluir las siguientes funcionalidades:
-
Definir el decorador
autenticar_usuarioque solicita al usuario un nombre de usuario y una contraseña antes de ejecutar la función. Los valores predefinidos para el nombre de usuario y la contraseña deben ser proporcionados dentro del decorador. -
Aplicar el decorador
autenticar_usuarioa una función llamadarealizar_operacion_sensible. -
Definir la función
realizar_operacion_sensibleque simula una operación sensible, como el acceso a una base de datos o la modificación de archivos importantes. -
Llamar a la función
realizar_operacion_sensibley observar el comportamiento del decorador.
Ejemplo de interacción con el programa:
Ingrese su nombre de usuario: admin
Ingrese su contraseña: 12345
Operación sensible realizada correctamente.
En este ejemplo, el programa solicitó al usuario un nombre de usuario y una contraseña. El usuario ingresó el nombre de usuario "admin" y la contraseña "12345", que coinciden con los valores predefinidos en el decorador autenticar_usuario, por lo que la función realizar_operacion_sensible se ejecutó correctamente y se mostró un mensaje de confirmación.