装饰器
在不改变原有函数定义与调用情况下,为其增加新功能。
- 核心思想:拦截
- 外层函数价值:拦 --> 拦截对旧功能的调用
- 内层函数价值:包 --> 将新旧功能包在一起
import time
def print_execute_time(func):
def wrapper(*args, **kwargs): # 合 --> 让调用旧功能的实参数量无限
start_time = time.time()
# func -- 旧功能
re = func(*args, **kwargs) # 拆 --> 将实参拆分后与旧功能的形参对应
stop_time = time.time()
# 新功能 -- 打印执行时间
print(stop_time - start_time)
return re
return wrapper
@print_execute_time # fun01 = print_execute_time(fun01)
def fun01():
time.sleep(2) # 睡眠2秒,用于模拟计算2秒钟
@print_execute_time
def fun02(a):
time.sleep(3) # 睡眠3秒
return "ok"
# fun01 = print_execute_time(fun01)# 调用外层函数,返回内层函数。
fun01()
# fun02 = print_execute_time(fun02)# 调用外层函数,返回内层函数。
re = fun02(100)
print(re)