Skip to main content

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:

  1. Definir el decorador registro_tiempo que recibe una función como argumento y registra el tiempo de ejecución de esa función.

  2. Aplicar el decorador registro_tiempo a la función operacion_larga.

  3. 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).

  4. 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:

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

  2. Aplicar el decorador validar_argumentos a la función dividir.

  3. Definir la función dividir que toma dos números como argumentos y realiza la división.

  4. 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:

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

  2. Aplicar el decorador autenticar_usuario a una función llamada realizar_operacion_sensible.

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

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