python開發-多個裝飾器的執行順序
阿新 • • 發佈:2018-11-08
今天講一下python中裝飾器的執行順序,以兩個裝飾器為例。
裝飾器程式碼如下:
def wrapper_out1(func): print('--out11--') def inner1(*args, **kwargs): print("--in11--") ret = func(*args, **kwargs) print("--in12--") return ret print("--out12--") return inner1 def wrapper_out2(func): print('--out21--') def inner2(*args, **kwargs): print("--in21--") ret = func(*args, **kwargs) print("--in22--") return ret print("--out22") return inner2 @wrapper_out2 @wrapper_out1 def test(): print("--test--") return 1 * 2 if __name__ == '__main__': test()
執行結果如下:
""" --out11-- --out12-- --out21-- --out22-- --in21-- --in11-- --test-- --in12-- --in22-- """
執行順序以圖片形式展示如下:
先進入離test函式最近的裝飾器,由於裝飾器中返回的是函式的函式名引用,並非真正呼叫函式,所以先列印:
--out11-- --out12-- --out21-- --out22--
到inner2後,func會真正執行函式,會呼叫inner1(),所以再列印:
--in21-- --in11--
到inner1中,func會呼叫test函式,所以會列印:
--test--
再從各個函數出來後,會依次列印:
--in12-- --in22--
合起來就是上面的執行結果。
各位小夥伴看明白了嗎?有問題歡迎隨時評論交流。