''' @Descripttion: @version: @Author: 馮浩 @Date: 2019-10-21 15:19:54 @LastEditors: 馮浩 @LastEditTime: 2019-10-21 16:02:34 ''' #例子一 def deco1(func):# 裝飾器 def inner(): print('裝飾器內部函數') return inner #原始表達方式, 裝飾器其實就是該方式的語法糖 def example0(): print('原始函數') print(id(example0)) example0 = deco1(example0) #本行即爲裝飾器本質 print(id(example0)) print('*'*32) example0() #執行替換後的本函數 #裝飾器表達法,裝飾器能夠理解爲函數調用的簡化表達 @deco1 def example1(): print('原始函數')
print('-'*32) example1() #執行裝飾器表達後的本函數 '''
執行結果以下: 63866536 60649120 ******************************** 裝飾器內部函數 -------------------------------- 裝飾器內部函數 ''' 補充:example1()表是調用函數的執行結果,example1表示調用函數自己(函數並未執行)
''' @Date: 2019-10-20 23:05:26 @LastEditors: 馮浩 @LastEditTime: 2019-10-21 23:58:33 ''' registry=[] def register (func):#裝飾函數 print('runnig register is %s'% func) registry.append(func) return func @register def f1(): print('執行f1') @register def f2(): print('執行f2') def f3(): print('執行f3') def main(): print('-'*32,'\n開始執行') print('已執行:', registry) f1() # f2() f3() if __name__ == "__main__": main() ''' 執行結果以下: runnig register is <function f1 at 0x00000000039FC1E0> runnig register is <function f2 at 0x00000000039FC268> -------------------------------- 開始執行 已執行: [<function f1 at 0x00000000039FC1E0>, <function f2 at 0x00000000039FC268>] 執行f1 執行f3 結論,裝飾函數在導入模塊時馬上執行,而被裝飾函數只在明確調用時運行 能夠看到,f2未被調用,可是其裝飾函數先行執行了. '''