Decoradores y Context Managers
Los decoradores permiten modificar el comportamiento de una función, mientras que los context managers gestionan recursos como archivos o conexiones a bases de datos.
Conceptos clave
@decorator: Sintaxis para aplicar un decorador.
with y enter, exit: Para crear context managers.
Ejemplo
# Decorador
def mi_decorador(func):
def wrapper():
print("Antes de la función")
func()print("Después de la función")
return wrapper
@mi_decorador
def saludo():
print("Hola")
saludo()
# Context manager
class MiContexto:
def __enter__(self):
print("Entrando al contexto")
return self
def __exit__(self, exc_type, exc_value, traceback):
print("Saliendo del contexto")
with MiContexto():
print("Dentro del contexto")
Ejemplo Práctico
Objetivo:
Aprender a crear decoradores y context managers en Python.
Descripción: Crea un decorador que registre la ejecución de una función y un context manager que gestione un archivo de log.
Instrucciones:
Crea un decorador que imprima la fecha y hora de la ejecución de una función.
Crea un context manager que gestione la apertura y cierre de un archivo de log.
Posibles soluciones
Código:
import time
# Decorador que registra la ejecución de una función
def registrar(func):
def wrapper(*args, **kwargs):
print(f"Ejecutando {func.__name__} a las {time.strftime('%H:%M:%S')}")
return func(*args, **kwargs)
return wrapper
@registrar
def saludo():
print("¡Hola, Mundo!")
saludo()
# Context manager para log
class LogManager:
def __enter__(self):
self.archivo = open('log.txt', 'a')
return self.archivo
def __exit__(self, exc_type, exc_value, traceback):
self.archivo.close()
with LogManager() as log:
f"Acción registrada a las {time.strftime('%H:%M:%S')}\n") log.write(