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 semanaLa 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 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!