裝飾器

 

 

 

 

簡單裝飾器:編程

 

寫代碼要遵循開發封閉原則,雖然在這個原則是用的面向對象開發,可是也適用於函數式編程,簡單來講,它規定已經實現的功能代碼不容許被修改,但能夠被擴展,即:函數式編程

 

封閉:已實現的功能代碼塊函數

 

開放:對擴展開發spa

 

def outer(function):
def inner():
print("123")
ret = function()
#return ret
return inner
@outer
def f1():
print("456")
f1()
運行後結果123 456
原理:將函數名f1看成參數傳進outer函數執行outer函數 而後再賦值給f1
    f1 =outer(f1) function=f1
    outer函數的返回值是inner函數名 因此f1 = inner
    從新執行f1()就是執行inner() 因此執行完123 後執行456
能夠有多個參數
def w1(func):
 2     def inner(arg1,arg2,arg3):
 3         # 驗證1
 4         # 驗證2
 5         # 驗證3
 6         return func(arg1,arg2,arg3)
 7     return inner
 8 
 9 @w1
10 def f1(arg1,arg2,arg3):
11     print 'f1'

能夠裝飾具備處理n個參數的函數的裝飾器
def w1(func):
    def inner(*args,**kwargs):
        # 驗證1
        # 驗證2
        # 驗證3
        return func(*args,**kwargs)
    return inner
 
@w1
def f1(arg1,arg2,arg3):
    print 'f1'

多個裝飾器應用到同一個函數
def outer(function):
def inner(*args,**kwargs):
print("123")
function(*args,**kwargs)
# return ret
return inner
def outer1(function):
def inner1(*args,**kwargs):
print("wangyao")
function(*args,**kwargs)
return inner1
@outer
@outer1
def f1(a1,a2,a3):
print("456")
f1(1,2,3)結果是123 wangyao 456@outer1被替換成inner1()函數再將inner1()函數應用到@outer裝飾器中
相關文章
相關標籤/搜索