Decoradores y Closures

Decoradores

Los decoradores son funciones que modifican el comportamiento de otras funciones. Se utilizan para aplicar funcionalidades adicionales como autenticación, registro de llamadas, validación, etc.

Sintaxis:

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

@decorador
def saludar():
    print("Hola!")

saludar()

El @decorador es azúcar sintáctico para saludar = decorador(saludar)

Closures

Un closure es una función interna que recuerda y tiene acceso a las variables de la función externa, incluso después de que esta haya finalizado su ejecución.

Ejemplo:

def crear_multiplicador(factor):
    def multiplicar(numero):
        return numero * factor
    return multiplicar

por_dos = crear_multiplicador(2)
print(por_dos(5))  # Salida: 10

Útiles para crear funciones personalizadas dinámicamente.