一、簡單裝飾器: 執行步驟: 1、@W1 執行W1,把自己裝飾的函數的函數名當做參數,即@W1 等價於W1(show)。 show()函數重新定義,即重新定義的show()函數等價於W1(show)返回值。 在重新定義的show()函數中去執行之前定義的函數。 二、帶參數裝飾器: 執行步驟: 1、執 ...
一、簡單裝飾器:
1 #定義裝飾器函數 2 def W1(main_func): 3 def outer(): 4 print("before") 5 show() 6 print("after") 7 return outer 8 9 #使用裝飾器 10 @W1 11 def show(): 12 pass 13 14 #執行show方法 15 show()
執行步驟:
1、@W1
執行W1,把自己裝飾的函數的函數名當做參數,即@W1 等價於W1(show)。
show()函數重新定義,即重新定義的show()函數等價於W1(show)返回值。
在重新定義的show()函數中去執行之前定義的函數。
二、帶參數裝飾器:
1 #之前函數 2 def Before(request,kargs): 3 print 'before' 4 5 #之後函數 6 def After(request,kargs): 7 print 'after' 8 9 #裝飾器函數 10 def Filter(before_func,after_func): 11 def outer(main_func): 12 def wrapper(request,kargs): 13 14 before_result = before_func(request,kargs) 15 if(before_result != None): 16 return before_result; 17 18 main_result = main_func(request,kargs) 19 if(main_result != None): 20 return main_result; 21 22 after_result = after_func(request,kargs) 23 if(after_result != None): 24 return after_result; 25 26 return wrapper 27 return outer 28 29 #使用裝飾器 30 @Filter(Before, After) 31 def Index(request,kargs): 32 print 'index'
執行步驟:
1、執行Filter(Before, After)函數。
2、@outer
3、重新定義Index()函數