python 修飾器
阿新 • • 發佈:2017-09-18
修飾器 python
因困擾自己多時,打算整理一下修飾器到底是什麽? 參考資料:http://python.jobbole.com/82344/ 修飾器 1. 定義2個函數 2. 基本實現 3. 問題:實現後, 要修改原來代碼中的變量名, funcB()改為funcA(funcB) 4. 解決方法:讓funcB賦值等於funcA(funcB),用時就是funcB(), 不用修改原來代碼, 這個要求需funcA(funcB)返回的是一個函數 a) 所以要返回一個函數,則加一個函數 wrapper(),然後return 函數; 將原來代碼寫進wrapper(),方便多次調用 5. python的語法糖@, funcB = funcA(funcB),@funcA, 簡寫代碼, 註意寫對位置,寫在要funcB()的前面 基本實現 def funcA(func): print(‘這是11111111‘) funcB_copy = func() return funcB_copy def funcB(): print(‘這是2222222222‘) funcA(funcB) funcB() # 1. 問題:實現後, 要修改原來代碼中的變量名, funcB()改為funcA(funcB) # 2. 解決方法:讓funcB賦值等於funcA(funcB),用時就是funcB(), 不用修改原來代碼, 這個要求需funcA(funcB)返回的是一個函數 # 所以要返回一個函數,則加一個函數 wrapper(),然後return 函數; 將原來代碼寫進wrapper(),方便多次調用 def funcA(func): def wrapper(): print(‘這是11111111‘) funcB_copy = func() return funcB_copy return wrapper def funcB(): print(‘這是2222222222‘) funcB = funcA(funcB) #這是func2 = wrapper()函數 funcA() #func2()執行的是wrapper() 最後python的語法糖@, 將funcB = funcA(funcB)改為 @funcA,簡寫代碼, 註意寫對位置,寫在funcB()的前面 def funcA(func): def wrapper(): print(‘這是11111111‘) funcB_copy = func() return funcB_copy return wrapper @funcA def funcB(): print(‘這是2222222222‘) funcB() # 原來是帶參數函數 def funcA(func): def wrapper(a, b): # 註意這裏 print(‘這是11111111‘) funcB_copy = func(a, b) #註意這裏 return funcB_copy return wrapper @funcA def funcB(a, b): print(‘這是2222222222‘) print(a, b) funcB() 基本調試幾遍就會了 ps:參考資料寫的更好 這篇文章不是轉載,內容也不是原創,我也不知道選什麽(只有原創、轉載、翻譯), 是參考文章的自己理解版,暫時標為原創,如有不妥請告訴我
本文出自 “11210358” 博客,請務必保留此出處http://11220358.blog.51cto.com/11210358/1966438
python 修飾器