等价形式
def Test(func):
def inside():
func()
return inside
def funcA():
print("Just a joke")
funcA = Test(funcA)
funcA()
等价于
def Test(func):
def inside():
func()
return inside
@Test
def funcA():
print("Just a joke")
funcA()
总之,@装饰器的存在就是为了避免funcA = Test(funcA)这样奇怪的语句
例子:计时器
请注意传入参数、返回值的处理
import time
def Timer(func):
def main(*args,**kwargs):
start = time.time()
rv = func(*args,**kwargs)
end = time.time()
print(end-start)
return rv
return main
@Timer
def funcA(X):
print('I\'m A')
time.sleep(0.5)
return X
@Timer
def funcB():
print('I\'m B')
time.sleep(0.2)
a = funcA('666')
print(a)
funcB()
输出:
I'm A
0.5002217292785645
666
I'm B
0.20061731338500977