1. 程式人生 > >python裝飾器,一種更容易理解的方式

python裝飾器,一種更容易理解的方式

裝飾器的策略可以這樣來概括,它是對原有函式封閉性的保持,又對原有函式進行擴充套件;就是說對你原有的程式碼不做修改,保證其功能模組不發生改變,在原有函式的基礎上,再加一層,對原有函式進行擴充套件;

假如說有這樣一件事情:

def printout(num):
    print "This is a Test"

上面是輸出一個字串,但是我們現在想在print之前進行一次判斷,最簡單的做法是:
def printout(num):
    if number:
        print "The number is ",num
   else:
        print "nothing to print"
    print "This is a Test"
按照上面的方式修改,第一破壞了開發封閉原則,第二沒發現有點low嗎
下面介紹用裝飾器來實現:

def warp(func):
    def inner(num):
        if num:  
            print "The number is ",num
       else:
            print "nothing to print"
        return func(num)
    return inner

@warp
def printout(num):
    print "This is a Test"

如果傳入的引數是多個,採用下面的表示方法:
def warp(func):
    def inner(num, *args, **kwargs):
        if num:  
            print "The number is ",num
       else:
            print "nothing to print"
        return func(num, *args, **kwargs)
    return inner

@warp
def printout(num, *args, **kwargs):
    print "This is a Test"