功能
拓展原函数功能的一种函数,返回值也是一个函数,不改变原函数代码的提前下增加新功能
1.嵌套函数
import time
def deco(func):
start = time.time()
func()
end = time.time()
time_cha = end - start
print(f"共耗时{time_cha}s")
def func1():
print("开始学习",end="")
time.sleep(2)
print("装饰器")
if __name__ == '__main__':
deco(func1)
2.闭包函数
一个函数,参数和返回值都是函数
- 增强函数功能
- 面向切面编程
import time
"""闭包,用于增强函数,给func增加统计时间的功能"""
# 入参为函数
def deco(func):
def improve_func():
start = time.time()
func()
end = time.time()
time_cha = end - start
print(f"共耗时{time_cha} s")
# 出参为函数
return improve_func
def func1():
print("开始学习", end="")
time.sleep(2)
print("装饰器")
if __name__ == '__main__':
# 调用deco()增加函数
func1 = deco(func1)
func1()
3.语法糖
计算机语言中添加的某种语法,不影响功能,简化代码书写
import time
"""闭包,用于增强函数,给func增加统计时间的功能"""
# 入参为函数
def deco(func):
def improve_func():
start = time.time()
func()
end = time.time()
time_cha = end - start
print(f"共耗时{time_cha} s")
# 出参为函数
return improve_func
@deco
def func1():
print("开始学习", end="")
time.sleep(2)
print("装饰器")
if __name__ == '__main__':
# 调用deco()增加函数
func1()
"""
func1 = improve_func() # func=func1
"""
- 函数有返回值 +++
- 函数传参 ***
import time
def deco(func):
def improve_func(*args,**kwargs):# ***
start = time.time()
res = func(*args,**kwargs)# +++ ***
end = time.time()
time_cha = end - start
print(f"共耗时{time_cha} s")
return res# +++
return improve_func
@deco
def func1(pause_time):
print("开始学习", end="")
time.sleep(pause_time)
print("装饰器")
return print("学习完毕")
if __name__ == '__main__':
func1(2)
4.多个装饰器
import time
def deco(func):
def improve_func(*args,**kwargs):# ***
start = time.time()
res = func(*args,**kwargs)# +++ ***
end = time.time()
time_cha = end - start
print(f"共耗时{time_cha} s")
return res# +++
return improve_func
def deco1(func):
def improve_func(*args,**kwargs):# ***
print("新的一天开始了!")
res = func(*args,**kwargs)# +++ ***
print("明天学习web自动化 !")
return res# +++
return improve_func
@deco
@deco1
def func1(pause_time):
print("开始学习", end="")
time.sleep(pause_time)
print("装饰器")
return print("学习完毕")
if __name__ == '__main__':
func1(2)