作用:
在不改变原来函数的代码情况下,进行修改,或者增加函数的功能
装饰器本质上就是一个闭包
雏形:
def wrapper(fn): wrapper: 装饰器 , fn: 目标函数
def inner():
# 在目标函数执行前的一些动作
fn()
# 在目标函数执行后的一些动作
return inner #千万别加(),这里是返回一个函数名。如果加(),表示返回函数执行的结果
@wrapper
def fn(): #目标函数
print("xxxxxxx")
功能:
执行目标函数fn, 相当于执行了wrapper函数里闭包的inner函数过程
1. 装饰器方式一
def lunch(fuc):
def inner():
print("water hand")
fuc()
print("su kou")
return inner
def eat():
print("eat somethings")
lunch(eat) #这里返回是一个函数名inner,函数名在内存中指向一个地址
l = lunch(eat) # l 和 inner 同时指向同一个内存地址
l() #这里是执行inner函数体
#执行结果
water hand
eat somethings
su kou
2.装饰器方式二
def lunch(fuc):
def inner():
print("wa