Introducción
Los decoradores de Python son una poderosa herramienta que te permite extender y modificar el comportamiento de las funciones sin modificar permanentemente su código. Proporcionan una forma limpia y expresiva de añadir funcionalidad a las funciones, haciendo que el código sea más modular y fácil de mantener.
En este tutorial, explicaremos el concepto de los decoradores, le mostraremos cómo funcionan y le proporcionaremos ejemplos prácticos para ayudarle a incorporar decoradores en sus propios proyectos.
Qué son los Decoradores?
Un decorador en Python es una función que toma otra función como argumento, le añade alguna funcionalidad y devuelve una nueva función. Los decoradores se utilizan a menudo para:
- Logging: Registrar cuándo se llaman las funciones.
- Control de acceso:Comprobación de permisos antes de ejecutar una función.
- Caching: Almacenamiento de resultados de llamadas a funciones costosas.
- Timing: Medición del tiempo de ejecución de las funciones.
Cómo funcionan los decoradores
Cuando aplicas un decorador a una función utilizando la sintaxis @decorator_name
, Python pasa la función decorada al decorador. El decorador devuelve entonces una nueva función que mejora o modifica el comportamiento de la función original.
Ejemplo básico de decorador
A continuación se muestra un ejemplo sencillo que demuestra cómo crear y utilizar un decorador para añadir comportamiento antes y después de una llamada a una función.
def my_decorator(func):
def wrapper(*args, **kwargs):
print("Antes de la llamada a la función")
= func(*args, **kwargs)
result print("Después de la llamada a la función")
return result
return wrapper
@my_decorator
def say_hello(name):
print(f"Hello, {name}!")
"Alice") say_hello(
Resultados:
Antes de la llamada a la función
Hola, Alice!
Después de la llamada a la función
Ejemplo avanzado: Decorador con argumentos
Los decoradores también pueden ser diseñados para aceptar argumentos, lo que permite modificaciones de comportamiento aún más flexibles.
def repeat(n):
def decorator(func):
def wrapper(*args, **kwargs):
for i in range(n):
print(f"Repetir los {i+1}/{n}:")
= func(*args, **kwargs)
result return result
return wrapper
return decorator
@repeat(3)
def greet(name):
print(f"Hello, {name}!")
"Bob") greet(
Resultados:
Repetir los 1/3:
Hola, Bob!
Repetir los 2/3:
Hola, Bob!
Repetir los 3/3:
Hola, Bob!
Mejores prácticas para el uso de decoradores
Mantén la sencillez:
Escribe decoradores pequeños y centrados que hagan bien una cosa.Usar functools.wraps:
Cuando escriba decoradores, utilicefunctools.wraps
para preservar los metadatos de la función original.import functools def my_decorator(func): @functools.wraps(func) def wrapper(*args, **kwargs): print("Antes de la llamada a la función") = func(*args, **kwargs) result print("Después de la llamada a la función") return result return wrapper
Documente sus decoradores:
Comentar y documentar claramente el propósito y uso de cada decorador.
Conclusión
Los decoradores en Python proporcionan una forma flexible y elegante de modificar el comportamiento de las funciones. Al dominar los decoradores, puedes escribir código más modular y reutilizable, mejorar la funcionalidad sin duplicar código e implementar problemas transversales como el registro y la gestión de errores de forma más limpia. Experimente con los ejemplos proporcionados aquí, e intente crear sus propios decoradores para ver cómo pueden simplificar sus tareas de codificación.
Lecturas adicionales
- Python para principiantes: tu primer script
- Sintaxis y variables en Python
- Programación funcional en Python
Feliz codificación, y disfruta mejorando tus funciones con decoradores!
Explorar más artículos
Aquí hay más artículos de la misma categoría para ayudarte a profundizar en el tema.
Reutilización
Cómo citar
@online{kassambara2024,
author = {Kassambara, Alboukadel},
title = {Decoradores de Python Explicados con Ejemplos},
date = {2024-02-05},
url = {https://www.datanovia.com/es/learn/programming/python/advanced/decorators-explained.html},
langid = {es}
}