裝飾本質(zhì)上是一個Python函數(shù),它能使其他函數(shù)在沒有任何代碼變化的情況下增加額外的功能。有了裝飾,我們可以抽出大量與函數(shù)功能無關(guān)的相同代碼,繼續(xù)重用。
包括插入日志、性能測試、事務處理、緩存和權(quán)限驗證。
# 裝飾器 # func指函數(shù) def decorator(func): def wrapper(*args, **kwargs): # 執(zhí)行函數(shù)內(nèi)部邏輯 打印時間 print(time.time(), args, kwargs) # 執(zhí)行調(diào)用函數(shù)中邏輯 打印不同參數(shù) func(*args, **kwargs) return wrapper # 一個參數(shù) @decorator def function(param): print('function : this is decorator ' + param) # 兩個參數(shù) @decorator def function1(param1, param2): print('function1 : this is decorator ' + param1) print('function1 : this is decorator ' + param2) # 三個參數(shù)(可變參數(shù)) @decorator def function2(param1, param2, **kwargs): print('function2 : this is decorator ' + param1) print('function2 : this is decorator ' + param2) print(kwargs) function('param') function1('param1' , 'param2') function2('param1' , 'param2', x=1,y=2,z=3)
內(nèi)容擴展:
函數(shù)注冊表
簡單注冊表
funcs = [] def register(func): funcs.append(func) return func @register def a(): return 3 @register def b(): return 5 # 訪問結(jié)果 result = [func() for func in funcs]
注冊表隔離(使用類的不同實例)
class Registry(object): def __init__(self): self._funcs = [] def register(self, func): self._funcs.append(func) def run_all(self): return [func() for func in self._funcs] r1 = Registry() r2 = Registry() @r1.register def a(): return 3 @r2.register def b(): return 5 @r1.register @r2.register
到此這篇關(guān)于Python裝飾器的應用場景及實例用法的文章就介紹到這了,更多相關(guān)Python裝飾器的應用場景內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!