1 装饰器的本质 : 闭包函数
#闭包:是嵌套函数,内部函数调用外部函数的变量
# def outer():
# a = 1
# def inner():
# print(a)
# inner()
# outer()
#
1.2 装饰器的作用 —— 不想修改函数的调用方式 但是还想在原来的函数前后添加功能
timmer就是一个装饰器函数,只是对一个函数 有一些装饰作用
2 原则: 开放封闭原则
2.1 开放 : 对扩展是开放的
2.2 封闭 : 对修改是封闭的
3 简单的装饰器函数:(数字代表执行顺序,要完全理解执行流程!!!)
def func(): #1
time.sleep(1) #10
print('老板好同事好大家好') #11
def timer(f): #2
def inner(): #4
start = time.time() #8
f() #9
end = time.time() #12
print(end - start) #13
return inner #5
#6 #3
func = timer(func)
func() #7
4 语法糖 @timmer (装饰器函数名)紧贴装饰器函数,和func = timer 语句是一样的效果
实现了通过原函数直接使用装饰器
@timmer #语法糖 @装饰器函数名
@timmer #语法糖 @装饰器函数名
def func(): #被装饰的函数
time.sleep(0.01)
print('老板好同事好大家好')
return '新年好'
# func = timmer(func) (有语法糖就不需要此句)
ret = func() #inner()
print(ret)
# 装饰器的作用 —— 不想修改函数的调用方式 但是还想在原来的函数前后添加功能
# timmer就是一个装饰器函数,只是对一个函数 有一些装饰作用