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_tiempo
que recibe una función como argumento y registra el tiempo de ejecución de esa función. -
Aplicar el decorador
registro_tiempo
a la funciónoperacion_larga
. -
Definir la función
operacion_larga
que 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_larga
y 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_argumentos
que 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_argumentos
a la funcióndividir
. -
Definir la función
dividir
que toma dos números como argumentos y realiza la división. -
Llamar a la función
dividir
con 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_usuario
que 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_usuario
a una función llamadarealizar_operacion_sensible
. -
Definir la función
realizar_operacion_sensible
que 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_sensible
y 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.