# 26 157 Decoradores En Python
**Source:** https://en.cursos.frogamesformacion.com/pages/blog/26-157-decoradores-en-python
**Language:** English

---

![Decoradores en Python: cómo crear funciones reutilizables para logging y validación](https://dropinblog.net/cdn-cgi/image/fit=scale-down,format=auto,width=700/34249715/files/portada-post/decoradores-en-python-como-crear-funciones-reutilizables-para-logging-y-validacion.png)

# Decoradores en Python: cómo crear funciones reutilizables para logging y validación

*![Juan Gabriel Gomila](https://dropinblog.net/cdn-cgi/image/fit=scale-down,width=100/34249715/authors/jb.JPG)*

Juan Gabriel Gomila 

Programming Languages 

  

06/06/2026 12:00pm

8 minutos

Leer el artículo

Audio generated by DropInBlog's Blog Voice AI™ may have slight pronunciation nuances. Learn more

## Contenidos

- ¿Qué son los decoradores y por qué importan?
- Entendiendo la base: funciones como objetos
- Tu primer decorador paso a paso
- El problema real: evitar duplicación de código
- Decorador para logging reutilizable
- Importante: conservar metadatos con functools.wraps
- Validación de argumentos con decoradores
- Decoradores con parámetros
- Combinando decoradores
- Casos reales donde usar decoradores
  - 1. Logging en producción
  - 2. Validación de datos
  - 3. Control de acceso
  - 4. Medición de rendimiento
- Errores comunes al usar decoradores
  - 1. Olvidar \*args y \*\*kwargs
  - 2. No devolver el resultado
  - 3. No usar wraps
  - 4. Sobrecargar la lógica
- Cuándo NO usar decoradores
- Buenas prácticas clave
- Conclusión
- Aprende sobre Lenguajes de Programación con la Ruta de Frogames Formación
- Frequently Asked Questions

Si llevas un tiempo programando en Python, probablemente ya hayas oído hablar de los decoradores. Puede que incluso los hayas usado… o que los hayas evitado porque te parecían confusos. Es normal. A primera vista, los decoradores en Python pueden parecer magia negra.

Pero cuando entiendes cómo funcionan, se convierten en una de las herramientas más potentes para escribir código limpio, reutilizable y fácil de mantener. En este artículo vamos a ver cómo sacarles partido de verdad, especialmente para dos casos muy prácticos: logging y validación.

## ¿Qué son los decoradores y por qué importan?

Un decorador es, en esencia, una función que envuelve otra función para añadirle comportamiento sin modificar su código original.

Dicho de otra forma: puedes “inyectar” lógica extra (como logs, validaciones o control de errores) sin tocar la función principal.

Este patrón es clave si quieres:

- Evitar duplicar código
- Mantener funciones limpias
- Separar responsabilidades

Cuando empiezas a dominar los **Decoradores en Python**, tu forma de estructurar el código cambia por completo.

## Entendiendo la base: funciones como objetos

Para entender los decoradores, primero necesitas recordar algo fundamental: en Python, las funciones son objetos.

Esto significa que puedes:

- Pasarlas como argumento
- Devolverlas desde otra función
- Asignarlas a variables

Ejemplo:

```
def saludar():
    return "Hola"

def ejecutar(func):
    return func()

print(ejecutar(saludar))
```

Este concepto es la base sobre la que se construyen los **Decoradores en Python**.

## Tu primer decorador paso a paso

Vamos a crear un decorador sencillo:

```
def mi_decorador(func):
    def wrapper():
        print("Antes de ejecutar la función")
        func()
        print("Después de ejecutar la función")
    return wrapper
```

Y lo aplicamos:

```
@mi_decorador
def decir_hola():
    print("Hola")

decir_hola()
```

Esto imprimirá:

```
Antes de ejecutar la función
Hola
Después de ejecutar la función
```

Ya estás usando ude los patrones más importantes de los **Decoradores en Python**.

## El problema real: evitar duplicación de código

Imagina que tienes varias funciones y quieres añadir logging:

```
def funcion1():
    print("Ejecutando función 1")

def funcion2():
    print("Ejecutando función 2")
```

Sin decoradores, acabarías haciendo algo así:

```
def funcion1():
    print("Inicio log")
    print("Ejecutando función 1")
    print("Fin log")
```

Esto escala fatal.

Aquí es donde los **Decoradores en Python** brillan de verdad.

## Decorador para logging reutilizable

Vamos a crear un decorador útil de verdad:

```
def log_decorador(func):
    def wrapper(*args, **kwargs):
        print(f"Iniciando {func.__name__}")
        resultado = func(*args, **kwargs)
        print(f"Finalizando {func.__name__}")
        return resultado
    return wrapper
```

Uso:

```
@log_decorador
def sumar(a, b):
    return a + b
```

Ventajas:

- No ensucias la función
- Reutilizas lógica
- Centralizas el comportamiento

Este es ude los usos más comunes de los **Decoradores en Python** en entornos profesionales.

## Importante: conservar metadatos con functools.wraps

Si inspeccionas la función decorada:

```
print(sumar.__name__)
```

Verás que aparece `wrapper`, no `sumar`.

Para solucionarlo:

```
from functools import wraps

def log_decorador(func):
    @wraps(func)
    def wrapper(*args, **kwargs):
        print(f"Iniciando {func.__name__}")
        return func(*args, **kwargs)
    return wrapper
```

Esto es una buena práctica esencial cuando trabajas con **Decoradores en Python**.

## Validación de argumentos con decoradores

Otro caso muy potente: validar datos antes de ejecutar la función.

Ejemplo:

```
def validar_no_vacio(func):
    def wrapper(*args, **kwargs):
        if not args:
            raise  ValueError("No se han pasado argumentos")
        return func(*args, **kwargs)
    return wrapper
```

Uso:

```
@validar_no_vacio
def procesar(nombre):
    print(f"Procesando {nombre}")
```

Este tipo de validaciones son ideales para:

- APIs
- Formularios
- Procesamiento de datos

The  **Decoradores en Python** permiten aplicar estas reglas de forma consistente.

## Decoradores con parámetros

A veces necesitas configurar el decorador:

```
def log_nivel(nivel):
    def decorador(func):
        def wrapper(*args, **kwargs):
            print(f"[{nivel}] Ejecutando {func.__name__}")
            return func(*args, **kwargs)
        return wrapper
    return decorador
```

Uso:

```
@log_nivel("INFO")
def mi_funcion():
    pass
```

Esto añade flexibilidad y hace que los **Decoradores en Python** sean aún más potentes.

## Combinando decoradores

Puedes usar varios decoradores a la vez:

```
@log_decorador
@validar_no_vacio
def guardar_dato(dato):
    print("Guardando...")
```

Orden importante:

- Se aplican de abajo hacia arriba

Esto permite construir pipelines de comportamiento sin complicar la función principal.

## Casos reales donde usar decoradores

### 1. Logging en producción

Registrar entradas, salidas y errores.

### 2. Validación de datos

Evitar inputs inválidos antes de ejecutar lógica.

### 3. Control de acceso

Verificar permisos antes de ejecutar funciones.

### 4. Medición de rendimiento

```
import time

def medir_tiempo(func):
    def wrapper(*args, **kwargs):
        inicio = time.time()
        resultado = func(*args, **kwargs)
        fin = time.time()
        print(f"Tardó {fin - inicio} segundos")
        return resultado
    return wrapper
```

The  **Decoradores en Python** son especialmente útiles en este tipo de escenarios transversales.

## Errores comunes al usar decoradores

### 1. Olvidar \*args y \*\*kwargs

Limita la reutilización.

### 2. No devolver el resultado

Rompe la función original.

### 3. No usar wraps

Pierdes información de la función.

### 4. Sobrecargar la lógica

Un decorador debe ser simple y claro.

## Cuándo NO usar decoradores

Aunque son muy útiles, siempre son la mejor opción.

Evítalos cuando:

- La lógica es demasiado compleja
- Dificultan la lectura
- Solo se usan una vez

A veces, una función normal es más clara.

## Buenas prácticas clave

Para trabajar bien con **Decoradores en Python**, ten en cuenta:

- Mantén los decoradores pequeños y específicos
- Usa nombres claros (`log_decorador`, `validar_usuario`)
- Documenta qué hacen
- Evita lógica innecesaria
- Testea los decoradores por separado

## Conclusión

Los decoradores son solo una curiosidad del lenguaje: son una herramienta clave para escribir código profesional en Python.

Te permiten separar responsabilidades, reducir duplicación y añadir comportamiento de forma elegante. Especialmente en tareas como logging y validación, marcan una gran diferencia en la calidad del código.

Si hasta ahora los evitabas, es el momento de darles una oportunidad. Empieza por casos simples, como los que has visto aquí, y poco a poco verás cómo los **Decoradores en Python** se convierten en una parte natural de tu forma de programar.

Cuando los dominas, solo escribes menos código: escribes mejor código.

## Aprende sobre Lenguajes de Programación con la Ruta de Frogames Formación

Si te ha interesado lo que has leído en este post, te encantará saber que puedes profundizar en este tema y en todas las competencias esenciales de los Lenguajes de Programación a través de la Ruta de Aprendizaje de Frogames Formación.

Esta ruta ha sido creada para quienes desean adentrarse desde cero en el mundo de la programación y avanzar paso a paso hasta dominar los lenguajes, herramientas y técnicas que utilizan los profesionales del sector. Aprenderás de forma práctica y progresiva a escribir, estructurar y optimizar código capaz de resolver problemas reales.

A lo largo del recorrido, explorarás conceptos fundamentales como la lógica de programación, las estructuras de datos, la programación orientada a objetos y el desarrollo de algoritmos. También trabajarás con lenguajes clave como Python, JavaScript, Java o Swift, siempre aplicados a proyectos prácticos.

Cada módulo está diseñado para que pongas en práctica lo aprendido mediante ejercicios y proyectos reales, construyendo paso a paso un portafolio que demuestre tu capacidad para desarrollar soluciones eficientes, optimizadas y listas para el mundo profesional.

Si quieres aprender a programar, resolver problemas mediante código y comprender cómo funcionan los lenguajes que impulsan la tecnología actual, la Ruta de Lenguajes de Programación de Frogames Formación es justo lo que necesitas.

¡Da el primer paso hacia una de las profesiones más demandadas, innovadoras y con mayor proyección del futuro!

¡Nos vemos en clase!

## Frequently Asked Questions

¿Qué son los decoradores en Python?

Son funciones que envuelven otras funciones para añadir comportamiento sin modificar su código original.

¿Para qué sirven los decoradores en Python?

Sirven para reutilizar lógica como logging, validación, control de acceso o medición de rendimiento sin duplicar código.

¿Por qué usar functools.wraps en un decorador?

Para conservar el nombre y los metadatos de la función original.

¿Se pueden pasar parámetros a un decorador?

Sí, usando una función adicional que actúa como fábrica de decoradores.

¿Cuándo es recomendable usar decoradores?

Cuando la lógica es demasiado compleja, dificulta la lectura o solo se va a usar una vez.

Please enable JavaScript to view the comments powered by Disqus.

« Volver al Blog

## Artículos relacionados

![Python](https://dropinblog.net/cdn-cgi/image/fit=scale-down,format=auto,width=700/34249715/files/portada-post/deja-de-escribir-scripts-de-ia-como-un-novato-el-setup-pro-en-python-para-subir-de-liga.png)

## Deja de escribir scripts de IA como un novato: el setup PRO en Python para subir de liga

11 minutos

18/06/2026 12:00pm

![De Python a JavaScript: cómo combinar varios lenguajes en proyectos reales y modernos](https://dropinblog.net/cdn-cgi/image/fit=scale-down,format=auto,width=700/34249715/files/portada-post/de-python-a-javascript-como-combinar-varios-lenguajes-en-proyectos-reales-y-modernos.png)

## De Python a JavaScript: cómo combinar varios lenguajes en proyectos reales y modernos

9 minutos

18/05/2026 12:00pm

![Cómo aprender Python rápido (y sin atascarte): el plan que seguiría desde cero](https://dropinblog.net/cdn-cgi/image/fit=scale-down,format=auto,width=700/34249715/files/portada-post/como-aprender-python-rapido-y-sin-atascarte-el-plan-que-seguiria-desde-cero.png)

## Cómo aprender Python rápido (y sin atascarte): el plan que seguiría desde cero

10 minutos

30/06/2026 12:00pm

CURSO DE REGALO

## Un Curso Gratis Para Ti

Nuestro curso de Unity te sale **Free** .

Aprende a crear tu primer videojuego con el motor de Unity en un curso de
más de 15h de vídeo.

Obtener el curso ahora