23. Decoradores - manuelmarinduque/Apuntes_Python_3 GitHub Wiki
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.
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.
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
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.
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))