標籤:裝飾器 http *args 驗證 功能 rgs pre 簡單 def
裝飾器
簡單總結
裝飾器的本質:一個閉包函數
裝飾器的功能:在不修改原函數及其調用方式的情況下對原函數功能進行擴充
簡單裝飾器的實現
def login(func):#等同於login(vv),ff=name def inner(x): print("裝飾器的簡單實現") func(x) #此時ff等於vv return inner@login #等同於login(vv)def vv(name): print("實現裝飾器:%s"%name)#vv => login(vv) => inner 執行login函數,並將 @login 下面的 函數 作為vv函數的參數,即:@login 等價於 login(vv)vv(‘ss‘) #inner(‘ss‘)裝飾器帶參數的函數 (摘自:http://www.cnblogs.com/Eva-J/articles/7194277.html#_label2)
def timer(func): def inner(a): start = time.time() func(a) print(time.time() - start) return inner@timerdef func1(a): print(a)func1(1)裝飾器——帶參數的裝飾器
裝飾器帶參數的多個函數
import timedef timer(func): def inner(*args,**kwargs): start = time.time() re = func(*args,**kwargs) print(time.time() - start) return re return inner@timer #==> func1 = timer(func1)def func1(a,b): print(‘in func1‘)@timer #==> func2 = timer(func2)def func2(a): print(‘in func2 and get a:%s‘%(a)) return ‘fun2 over‘func1(‘aaaaaa‘,‘bbbbbb‘)print(func2(‘aaaaaa‘))
可以裝飾具有處理n個參數的函數的裝飾器
def w1(func): def inner(*args,**kwargs): # 驗證1 # 驗證2 # 驗證3 return func(*args,**kwargs) return inner @w1def f1(arg1,arg2,arg3): print ‘f1‘
一個函數可以被多個裝飾器裝飾嗎?
def w1(func): def inner(*args,**kwargs): # 驗證1 # 驗證2 # 驗證3 return func(*args,**kwargs) return inner def w2(func): def inner(*args,**kwargs): # 驗證1 # 驗證2 # 驗證3 return func(*args,**kwargs) return inner @w1@w2def f1(arg1,arg2,arg3): print ‘f1‘
Python 3.5(裝飾器)