不帶參數的裝飾器python
decorator(f)(*arges,**kwarges)app
@decoratorspa
def f(): code
passclass
帶參數的裝飾器import
decorator(name)(f)(*arges,**kwarges)im
def f():call
pass裝飾器
代碼示例(不加名字的)co
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