Python3中装饰器
什么是装饰器?
装饰器,顾名思义,狭义的可以理解为起到一个装饰的作用。
即定义一个函数后,想要重新使这个函数增加新的功能,但是不改变原函数的内容。可以想象着进行一个包装,然后再调用原函数,其实就是调用的包装后的函数。
下面我们通过实例进行阐述:
import time #def caltime(f):就是一个装饰器,
#装饰器一般都写在顶上,当函数要调用装饰器的时候
#用@进行连接 下文中的@caltime
def caltime():
def func():
t1 = time.time() #上文导入时间包,t1开始 t2结束 计算f()运算时间
f()
t2 = time.time()
print(t1)
print(t2)
print(t2 - t1)
return func #返回func函数
@caltime #连接上文的装饰器
def getwater():
print('取了一杯水')
print(pow(2,100)/11*30+23**23)
getwater()
#(输出) 取了一杯水
2.4337696909561263e+31
1539880939.1847699
1539880939.1857696
0.0009996891021728516
@caltime这个语句相当于 执行 getwater = caltime(getwater),为getwater函数装饰并返回func
即getwater=func (实则getwater指向func函数)
所以 getwater()= func()
调用getwater() 实际是调用func()函数。
路径为下:
getwater()-->进入@caltime-->执行def caltime(f)--
#(@caltime-->执行def func中间并没有运行func函数,因为并没有进行调用函数func)
--->return func-->func()-->print(t2 - t1)
后续再补上其他复杂类型的—