¿Qué son los decoradores en Python?: conoce algunos

| Última modificación: 21 de octubre de 2024 | Tiempo de Lectura: 3 minutos

Algunos de nuestros reconocimientos:

Premios KeepCoding

Los decoradores en python son una característica que, bien usada, puede llegar a ser muy poderosa y versátil dentro de este lenguaje. De seguro programando te habrás encontrado con una curiosa @ encima de alguna función y te habrás preguntado para qué sirve. Pues bien, eso es un decorador y, en palabras simples, los decoradores en python son funciones que toman otra función como argumento y le añaden funcionalidades, todo esto sin alterar el código original de esta función.

El día de hoy queremos contarte más detalladamente qué son los decoradores en python y cómo usarlos.

¿Qué son los decoradores en python?

Los decoradores en python son funciones que reciben como entrada otra función, modifican su comportamiento y luego de eso la devuelven. Se usan para extender funcionalidades a funciones que ya existen sin la tediosa necesidad de modificar su código base. Es como si añadieras una cpaa extra sobre la función , lo quemejora su capacidad sin tocar su núcleo.

La sintaxis básica de los decoradores en python es:

def mi_decorador(funcion):
def funcion_interna():
print("Antes de ejecutar la función")
funcion()
print("Después de ejecutar la función")
return funcion_interna

En este ejemplo mi_decorador es una función que recibe como argumento otra función (llamada funcion), la envuelve dentro de funcion_interna y agrega una funcionalidad adicional, como imprimir mensajes antes y después de su ejecución.

Aprende a usar decoradores en Python

Una vez creado el decorador, lo utilizamos con la sintaxis @decorador. Veamos un ejemplo sobre cómo decorar una función:

@mi_decorador
def saludar():
print("Hola, mundo")

saludar()

🔴 ¿Quieres Aprender a Programar con Python? 🔴

Descubre el Full Stack Jr. Bootcamp - Aprende a Programar desde Cero de KeepCoding. La formación más completa del mercado y con empleabilidad garantizada

👉 Prueba gratis el Bootcamp Aprende a Programar desde Cero por una semana

La salida de este código sería:

Antes de ejecutar la función
Hola, mundo
Después de ejecutar la función

Como puedes ver, el decorador añade los mensajes «Antes de ejecutar la función» y «Después de ejecutar la función» a la ejecución de la función saludar sin modificar su contenido original.

Tipos de decoradores en Python

Cada uno de los decoradores en Python sirve a una función específica. Veamos un poco cómo se dividen:

  • Decoradores sin parámetros: Estos son los más simples en la cadena, ya que solo reciben una función como argumento y añaden funcionalidades adicionales. El ejemplo de mi_decorador fue uno básico de esta categoría.
  • Decoradores con parámetros: estos nos permiten añadir funcionalidades más dinámicas al recibir parámetros adicionales. Veamos cómo hacerlo por medio de un ejemplo:
def repetir(n):
def decorador(funcion):
def funcion_interna(*args, **kwargs):
for _ in range(n):
funcion(*args, **kwargs)
return funcion_interna
return decorador

@repetir(3)
def decir_hola():
print("Hola")

decir_hola()

En este caso el decorador repetir ejecuta la función decir_hola tres veces, porque le hemos pasado el parámetro n=3. La salida sería:

Hola
Hola
Hola
  • Decoradores para medir el tiempo de ejecución: es decir, para medir el tiempo que tarda una función en ejecutarse:
import time

def medir_tiempo(funcion):
def funcion_interna(*args, **kwargs):
inicio = time.time()
resultado = funcion(*args, **kwargs)
fin = time.time()
print(f"Tiempo de ejecución: {fin - inicio} segundos")
return resultado
return funcion_interna

@medir_tiempo
def suma(a, b):
time.sleep(1) # Simula un retraso de 1 segundo
return a + b

suma(5, 10)

Aquí, el decorador medir_tiempo calcula cuánto tiempo tarda en ejecutarse la función suma.

El resultado se vería algo similar a esto:

decoradores en python ejemplo

Decoradores integrados en Python

Python también cuenta con varios decoradores integrados que puedes usar sin necesidad de crearlos tú mismo. Algunos de los más comunes son:

  • @staticmethod: Convierte un método en estático, lo que significa que no necesita una instancia de la clase para ser llamado.
  • @classmethod: Permite que un método de clase reciba la propia clase como primer argumento, en lugar de una instancia de la clase.
  • @property: Convierte un método en un atributo de solo lectura.

Si te ha gustado este tema y quieres seguir aprendiendo sobre diferentes áreas de la programación y lenguajes, inscríbete en el bootcamp de programación para principiantes que tiene Keepcoding para ti. Allí darás los pasos en este mundillo y verás cómo se abren puertas nuevas en tu camino con excelentes oportunidades. ¡Inspírate y sigue tus sueños ahora!

Ramón Maldonado

Full Stack Developer y Responsable de Formación base en KeepCoding.

Posts más leídos

¡CONVOCATORIA ABIERTA!

Aprende a Programar desde Cero

Full Stack Jr. Bootcamp

Apúntate y consigue uno de los perfiles más demandados con Python en solo 4 meses.