- 装饰器的好处就是在不用更改原函数的代码前提下给函数增加新的功能
- 两个原则:
不能修改被装饰的函数的源代码
不能修改被装饰的函数的调用方式
对无参函数进行装饰
def total_time(func):
def wrapper():
start = datetime.datetime.now()
func()
stop = datetime.datetime.now()
time = (stop - start).seconds
print(time)
return wrapper
@total_time
def pri():
print("计算程序执行时间")
if __name__ == "__main__":
pri()
# #原理:
1.执行函数pri()时,会先调用total_time函数,将被装饰的函数pri当做入参传入(此时未pri)
2.在执行total_time函数时,直接把内部函数wrapper返回了,同时把它赋值给pri
3.(重点)此时的pri已经不是未加装饰时的pri了,而是指向了total_time.wrapper函数地址了
4.接下来,执行新pri函数,即total_time.wrapper函数,先start赋值,然后调用原来的pri(),该处的pri就是通过装饰传进来的参数pri
对有参函数进行装饰
def total_time(func):
def wrapper(*args,**kwargs):
start = datetime.datetime.now()
func(*args,**kwargs)
sto