裝飾器的使用

Bobbyby發表於2018-06-30
  1. 函式帶多個引數

普通的裝飾器, 列印函式的執行時間

def decrator(func):
    def wrap(*args, **kwargs):
        start_time = time.time()
        res = func(*args, **kwargs)
        end_time = time.time()
        print('執行時間為', end_time-start_time)
        return res
    return wrap
  1. 裝飾器帶有多個引數
    當裝飾器帶有多個引數的時候, 裝飾器函式就需要多加一層巢狀:

比如:

def decrator(*dargs, **dkargs):
    def wrapper(func):
        def _wrapper(*args, **kargs):
            print ("裝飾器引數:", dargs, dkargs)
            print ("函式引數:", args, kargs)
            return func(*args, **kargs)
        return _wrapper
    return wrapper

為什麼被裝飾函式體可以傳入內層呢?

裝飾器函式有多個引數, 需要以@decrator(1, a=2)的方式使用, 這時候decrator是已經執行的(因為加了括號), 可以粗略的理解為載入被裝飾函式的上的是wrapper, 所以這和普通的裝飾器並無差別.

相關文章