装饰器

不带参数的装饰器


def log(func):
    @functools.wraps(func)
    def wrapper(*args, **kwargs):
        print("Start")
        return func(*args, **kwargs)
    return wrapper


@log             # 相当于 t = log(t)
def t():
    print("End")


t()

# Start
# End

带参数的装饰器


def log(name):
    print(name)
        
    def decorator(func):
        @functools.wraps(func)
        def wrapper(*args, **kwargs):
            print("Start")
            return func(*args, **kwargs)
        return wrapper
    return decorator


@log("Tom")      # 相当于 t = log("Tom")(t)
def t():
    print("End")


t()

# Tom
# Start
# End