Introducción a los decoradores
Desliza para mostrar el menú
Un decorador en Python es una función de orden superior que toma otra función como argumento y devuelve una nueva función que amplía o modifica el comportamiento de la función original.
Los decoradores son una característica fundamental en Python que permiten modificar o mejorar el comportamiento de funciones o métodos sin cambiar directamente su código. En esencia, los decoradores son funciones de orden superior: toman otra función como argumento, amplían o modifican su comportamiento y devuelven una nueva función. En Python, la sintaxis para aplicar un decorador es el símbolo @ seguido del nombre del decorador, colocado directamente encima de la definición de la función.
Casos de uso comunes para los decoradores incluyen:
- Registro de logs;
- Medición del tiempo de ejecución de funciones;
- Control de acceso o permisos;
- Memoización (almacenamiento en caché de resultados);
- Validación de entradas.
Los decoradores permiten mantener este tipo de lógica separada de la lógica principal del negocio, lo que conduce a un código más limpio y mantenible. Dominar los decoradores permite aprovechar una herramienta poderosa para escribir código Python reutilizable y expresivo.
12345678910111213def simple_decorator(func): def wrapper(*args, **kwargs): print("Before the function call") result = func(*args, **kwargs) print("After the function call") return result return wrapper @simple_decorator def greet(name): print(f"Hello, {name}!") greet("Alice")
Comprensión de args y kwargs en definiciones de funciones
Al escribir decoradores y envoltorios, a menudo es necesario manejar funciones que acepten cualquier cantidad o tipo de argumentos. Python proporciona *args y **kwargs para hacer esto posible.
*argsrecopila cualquier argumento posicional adicional pasado a una función en una tupla;**kwargsrecopila cualquier argumento nombrado adicional en un diccionario.
Esta flexibilidad es fundamental para los decoradores. Un decorador debe ser capaz de aceptar y reenviar todos los argumentos a la función original, sin importar cuántos sean o de qué tipo. Sin *args y **kwargs, el decorador solo funcionaría con funciones que tengan una firma fija, lo que limita la reutilización.
123456789101112def my_decorator(func): def wrapper(*args, **kwargs): print("Arguments:", args) print("Keyword arguments:", kwargs) return func(*args, **kwargs) return wrapper @my_decorator def example(a, b, greeting="Hello"): print(f"{greeting}, {a} and {b}!") example(1, 2, greeting="Hi")
Este enfoque garantiza que el decorador pueda envolver cualquier función, haciendo que el código sea robusto y reutilizable.
1. ¿Cuál es el propósito del símbolo @ en Python?
2. ¿Cómo modifica un decorador el comportamiento de una función?
¡Gracias por tus comentarios!
Pregunte a AI
Pregunte a AI
Pregunte lo que quiera o pruebe una de las preguntas sugeridas para comenzar nuestra charla