python--装饰器

37 阅读1分钟
def enter_background():
    print("进入后台")


def delete_order():
    print("删除订单")


def verify_permission(func):
    def wrapper():
        print("正在验证")
        func()

    return wrapper


enter_background = verify_permission(enter_background) # 拦截调用
delete_order = verify_permission(delete_order)
enter_background() # 拦截调用
delete_order()

装饰器,需要用到闭包 enter_background = verify_permission(enter_background)

delete_order = verify_permission(delete_order)

这两行代码拦截对对应函数的调用

可以增加新功能,且不修改以前的代码

优点:逻辑连续性

缺点:每次拦截对已有功能(enter background)的调用,不科学

最终写法:

@verify_permission
def enter_background():
    print("进入后台")

与上文同意

装饰器:拦截调用

def verify_permission(func):
    def wrapper(*args,**kwargs):
        print("正在验证")
        func(*args,**kwargs)

    return wrapper

代码中 形参中的*是将数据合起来,合成一个元组。

实参中的*是将元组拆开,与函数中所需要的参数对应