python裝飾器,一種更容易理解的方式
阿新 • • 發佈:2019-01-28
裝飾器的策略可以這樣來概括,它是對原有函式封閉性的保持,又對原有函式進行擴充套件;就是說對你原有的程式碼不做修改,保證其功能模組不發生改變,在原有函式的基礎上,再加一層,對原有函式進行擴充套件;
假如說有這樣一件事情: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"