簡單裝飾器

# -*- coding:utf-8 -*- def w1(show): def outer(a,b): print('添加新功能1') show(a,b) print('添加新功能2') return outer #@w1的做用就至關於w1(show),即執行w1(show)函數而且把show()函數的地址做爲參數傳進去,覺得製做 # 新show()函數作準備,返回的outer至關於新show()函數的地址。新outer()函數就是製做的 # 新show()函數,新show()函數在集成了舊show()函數的功能上,添加了新的功能 @w1 def show(a,b): print('a+b=%d'%(a+b)) show(2,3)

這個簡單裝飾器的執行流程是這樣的:首先把函數w1()讀到內存不執行(不被調用不會執行),而後到@w1------>w1(show)------>return outer------>至此,新的show()函數框架製做完成,而後再往裏面添加新功能就好了。------>show(2,3),此爲函數調用,注意,會調用新框架

show()函數,也就是outer()函數------>print('添加新功能1')------>show(2,3),調用舊的show(a,b)函數,即未被裝飾過的show(a,b)函數------>ide

print('a+b=%d'%(a+b)),執行結果是a+b=5------>print('添加新功能2')------>結束。函數

下面是本身隨便寫的一個很是簡單的帶裝飾器的函數:spa

 1 def add(f3):  2     def f2(a,b):  3         print('add the first function')  4  f3(a,b)  5         print('add the second function')  6     return f2  7 
 8 @add  9 def f1(a,b): 10     print('the initial function') 11     print('a+b=%d'%(a+b)) 12 f1(3,2)
View Code
相關文章
相關標籤/搜索