Decorators

Nuestra primera función (title_decorator) toma una segunda función (print_name_function) y la envuelve (wrap) junto con una funcionalidad nueva en una tercera función que es devuelta por title_decorator:

def title_decorator(print_name_function):
    def wrapper():
        print("Engineer:")
        print_name_function()
    return(wrapper)


def print_my_name():
    print("Miguel")
    
    
decorated_function = title_decorator(print_my_name)


decorated_function()

Esta sintaxis se puede simplificar bastante usando el operador decorator:

def title_decorator(print_name_function):
    def wrapper():
        print("Engineer:")
        print_name_function()
    return(wrapper)

@title_decorator
def print_my_name():
    print("Miguel")
    

print_my_name()