CodeGym /Cursos /Python SELF ES /Decoradores

Decoradores

Python SELF ES
Nivel 14 , Lección 1
Disponible

5.1 Introducción a los decoradores

Decoradores son funciones que toman otra función como argumento y devuelven una nueva función, modificando o ampliando el comportamiento de la función original. Se utilizan para mejorar la legibilidad y reutilización del código.

Los decoradores permiten modificar el comportamiento de funciones o métodos sin cambiar su código original. Por eso son ampliamente utilizados para añadir funcionalidad, registro de logs, control de acceso y muchas otras tareas.

La sintaxis de los decoradores en Python incluye el uso del símbolo @ antes del nombre del decorador, que se coloca antes de la definición de la función.


@decorator
def my_function():
    pass

Esto es equivalente al siguiente código:


def my_function():
    pass
        
my_function = decorator(my_function)

Piensa cuidadosamente en lo que sucede aquí: declaramos la función my_function, pero luego la sustituimos con la función decorator, en la que pasamos nuestra función como parámetro. La función decorator puede invocar nuestra función a su elección.

5.2 Creación de un decorador simple

Consideremos un decorador simple que imprime un mensaje antes y después de llamar a la función.


def my_decorator(func):
    def wrapper():
        print("Antes de llamar a la función")
        func()
        print("Después de llamar a la función")

    return wrapper
        
@my_decorator
def say_hello():
    print("Hello!")
        
say_hello()

Explicación

Decorador (my_decorator): Esta función toma la función func como argumento y devuelve una nueva función wrapper, que llama a func y añade comportamiento adicional antes y después de su invocación.

Función con decorador (say_hello): La función say_hello está envuelta en el decorador my_decorator, lo que añade comportamiento adicional al llamarla.

Salida:


# Antes de llamar a la función
Hello!
# Después de llamar a la función

5.3 Decoradores con argumentos

Los decoradores pueden tomar argumentos, lo que permite personalizar su comportamiento con flexibilidad.


def repeat(num_times):
    def decorator_repeat(func):
        def wrapper(*args, **kwargs):
            for _ in range(num_times):
                func(*args, **kwargs)

        return wrapper
        
    return decorator_repeat
        
@repeat(num_times=3)
def say_hello(name):
    print(f"Hello, {name}!")
        
say_hello("Alice")

Explicación

Decorador con argumentos (repeat): Esta función toma el argumento num_times y devuelve el decorador decorator_repeat.

Decorador (decorator_repeat): Este decorador toma la función func y devuelve una nueva función wrapper, que llama a func num_times veces.

Función con decorador (say_hello): La función say_hello se llama tres veces gracias al decorador repeat.

Salida:


Hello, Alice!
Hello, Alice!
Hello, Alice!
Comentarios
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION