装饰器对函数进行修饰,添加一些功能
装饰器也是一个函数
但是需要满足一些特定需求才是一个真正的装饰器
1.不修改被装饰函数的源代码
2.不修改被装饰函数的调用方式装饰器=高阶函数+函数嵌套+闭包
满足以上所有条件,才是一个真正的装饰器
下述代码就是一个装饰器,给ti函数加上运行时间,并且没有修改ti函数的源代码,也没有修改ti函数的调用方式
import time
def text():
def text1(func):
start_time = time.time()#函数开始运行的时间
func()#调用的就是ti函数
stop_time = time.time()#函数结束时间
print('函数的运行时间是%s' %(stop_time-start_time))
return text1
@text #此方法调用text装饰器
def ti():
time.sleep(3)#让程序延迟3秒执行
print('函数运行完毕')
ti()#调用函数
@text 等同于 ti = text(ti) 如果不使用@text则需要用 ti = text(ti),这样每次调用装饰器都需要给ti函数重新赋值,过于麻烦,也不符合上述的不改变函数的调用方式,且只要在需要用到装饰器的时候值需要@text就可以解决
网友评论