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
代码中 形参中的*是将数据合起来,合成一个元组。
实参中的*是将元组拆开,与函数中所需要的参数对应