Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Aprende Introducción a los decoradores | Dominio de los Iteradores y Decoradores en Python
Conceptos de Programación Funcional en Python

bookIntroducción a los decoradores

Desliza para mostrar el menú

Note
Definición

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.

12345678910111213
def 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")
copy

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.

  • *args recopila cualquier argumento posicional adicional pasado a una función en una tupla;
  • **kwargs recopila 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.

123456789101112
def 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")
copy

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?

question mark

¿Cuál es el propósito del símbolo @ en Python?

Selecciona la respuesta correcta

question mark

¿Cómo modifica un decorador el comportamiento de una función?

Selecciona la respuesta correcta

¿Todo estuvo claro?

¿Cómo podemos mejorarlo?

¡Gracias por tus comentarios!

Sección 4. Capítulo 1

Pregunte a AI

expand

Pregunte a AI

ChatGPT

Pregunte lo que quiera o pruebe una de las preguntas sugeridas para comenzar nuestra charla

Sección 4. Capítulo 1
some-alt