裝飾器的策略可以這樣來概括,它是對原有函式封閉性的保持,又對原有函式進行擴充套件;就是說對你原有的**不做修改,保證其功能模組不發生改變,在原有函式的基礎上,再加一層,對原有函式進行擴充套件;
假如說有這樣一件事情:
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"
Python 裝飾器(一)
首先,看一下下面三個函式,假如說我現在要加乙個條件,計算每個函式所花費時間。def add x,y return x y def sub x,y return x y def multi x,y return x y如果不考慮效率,我們可以每個函式逐一新增如下 import time def add...
Python 兩種裝飾器
目錄 帶引數的裝飾器 函式 類裝飾器 裝飾器 decorators 是 python 的乙個重要部分。簡單地說 他們是修改其他函式的功能的函式。他們有助於讓我們的 更簡短,也更pythonic python範兒 來想想這個問題,難道 wraps不也是個裝飾器嗎?但是,它接收乙個引數,就像任何普通的函...
python裝飾器解析(一)
裝飾器是一種著名的設計模式,允許我們動態的為乙個物件來新增一些額外的功能而無需去修改它所在的類或者是建立新類。python中的函式也是一種物件,下面用幾個函式例項來說明python中的裝飾器。首先從最簡單的開始,假設我們有如下的函式 def my func print do something 現在...