23. Decoradores - manuelmarinduque/Apuntes_Python_3 GitHub Wiki

Funciones decoradores

Toma de Decoradores I y II. Vídeo 73 y 74 Fuente de internet

Son funciones que a su vez añaden funcionalidades a otras funciones, por eso se les llama decoradores.

Estructura de un decorador

Un decorador lo conforman 3 funciones A, B y C: donde A recibe como parámetro a B (función a decorar) para que C le añada funcionalidades. Si B tiene return, C debe retornar a B con sus argumentos. Por tanto, un decorador retorna una función C, que decora a B:

def funcion_decorador_A(funcion_B):
    def funcion_interna_C(*args, **kwargs):
        # Cuerpo de la función interna con las nuevas funcionalidades.
        # Si funcion_B tiene return entonces retornar B con sus argumentos en C:
        return funcion_B(*args, **kwargs)
    return funcion_interna_C

Si la función a decorar B recibe parámetros, estos deben agregarse de la forma genérica *args y **kwargs en la función interna C y en su interior, donde se retorna a B.

Ejecución de un decorador

Antecederle a la función a decorar la siguiente línea:

@funcion_decorador_A
def funcion_B(arg1, arg2,...,argn):
    # Cuerpo de la función
    return expresion

Utilidad de un decorador

Una utilidad de usar decoradores está en la apertura y cierra de la conexión y cursor de una BBDD (Ver archivo BBDD). También se usan en el framework web Django.

Ejemplo

def decorador(funcion):
    def interna(*args):
        print(f"Function {funcion.__name__}() called!")
        return funcion(*args)
    return interna

@decorador
def suma(num1, num2, num3):
    return num1+num2+num3

@decorador
def resta(num1, num2):
    return num1-num2

print(suma(2,4,6))
print(resta(9,6))
⚠️ **GitHub.com Fallback** ⚠️