裝飾器也是一個函數(嵌套),用來裝飾某個函數,來看下面的代碼
import time
def time_count(func):
def wrapper():
start = time.time()
func()
end = time.time()
print 'This funnction costs:',end - start
return wrapper
def TellHi():
print 'Hello ervery body'
Hi = time_count(TellHi)
Hi()
'''
使用語法糖@來裝飾函數
@time_count
def TellHi():
print 'Hello ervery body'
TellHi()
'''
現在有一個需求,有無數個fun(),都需要添加驗證,這樣就需要裝飾器來修飾來。
def outer(fun):
def wrapper(arg):
print '驗證'
fun(arg)
return wrapper
@outer
def Func1(arg):
print 'func1',arg
@outer
def Func2(arg):
print 'func2',arg
@outer
def Func3(arg):
print 'func3',arg
Func1('xxxx')
Func2('xxxx')
Func3('xxxx')
如過函數有返回參數
def outer(fun):
def wrapper(arg):
print '驗證'
res = fun(arg)
return res
return wrapper
@outer
def Func1(arg):
print 'func1',arg
return 'return'
@outer
def Func2(arg):
print 'func2',arg
return 'return'
@outer
def Func3(arg):
print 'func3',arg
return 'return'
print Func1('xxxx')
print Func2('xxxx')
print Func3('xxxx')