python函數裝飾器

不帶參數的裝飾器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
相關文章
相關標籤/搜索