不带参数的装饰器
decorator(f)(*arges,**kwarges)
@decorator
def f():
pass
带参数的装饰器
decorator(name)(f)(*arges,**kwarges)
def f():
pass
代码示例(不加名字的)
import time
def log():
def wrapper(*arges,**kwarges):
strat=time.clock()
res=func(*arges,**kwarges)
end=time.clock()
print 'calling',func.__name__,arges,kwarges
print 'strat at:',strat,'end at:',end
return res
return wrapper
@log
def fun(x,y):
return x+y
print fun(10,20)
输出结果:
calling: fun (10, 20) {}
strat at: 0.01 end at: 0.01
30
代码示例(加名字的)
import time
def logex(name):
def log(func):
def wrapper(*arges,**kwarges):
start=time.clock()
res=func(*arges,**kwarges)
end=time.clock()
print name,'calling:',fun.__name__,arges,kwarges
print 'strat at:',strat,'end at:',end
return res
return wrapper
return log
@logex('jack')
def fun(x,y):
return x+y
print fun(10,20)
输出结果
jack calling: fun (10, 20) {}
start at: 0.0 end at: 0.0
30