裝飾器是程序開(kāi)發(fā)中經(jīng)常會(huì)用到的一個(gè)功能,也是python語(yǔ)言開(kāi)發(fā)的基礎(chǔ)知識(shí),如果能夠在程序中合理的使用裝飾器,不僅可以提高開(kāi)發(fā)效率,而且可以讓寫(xiě)的代碼看上去顯的高大上^_^
使用場(chǎng)景
可以用到裝飾器的地方有很多,簡(jiǎn)單的舉例如以下場(chǎng)景
引入日志 函數(shù)執(zhí)行時(shí)間統(tǒng)計(jì) 執(zhí)行函數(shù)前預(yù)備處理 執(zhí)行函數(shù)后清理功能 權(quán)限校驗(yàn)等場(chǎng)景 緩存今天講一下python中裝飾器的執(zhí)行順序,以?xún)蓚€(gè)裝飾器為例。
裝飾器代碼如下:
def wrapper_out1(func): print('--out11--') def inner1(*args, **kwargs): print("--in11--") ret = func(*args, **kwargs) print("--in12--") return ret print("--out12--") return inner1def 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_out1def test(): print("--test--") return 1 * 2if __name__ == '__main__': test()
執(zhí)行結(jié)果如下:
"""
--out11--
--out12--
--out21--
--out22--
--in21--
--in11--
--test--
--in12--
--in22--
"""
執(zhí)行順序以圖片形式展示如下:
先進(jìn)入離test函數(shù)最近的裝飾器,由于裝飾器中返回的是函數(shù)的函數(shù)名引用,并非真正調(diào)用函數(shù),所以先打印:
--out11--
--out12--
--out21--
--out22--
到inner2后,func會(huì)真正執(zhí)行函數(shù),會(huì)調(diào)用inner1(),所以再打?。?/p>
--in21--
--in11--
到inner1中,func會(huì)調(diào)用test函數(shù),所以會(huì)打?。?/p>
--test--
再?gòu)母鱾€(gè)函數(shù)出來(lái)后,會(huì)依次打?。?/p>
--in12--
--in22--
合起來(lái)就是上面的執(zhí)行結(jié)果。
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持武林站長(zhǎng)站。
新聞熱點(diǎn)
疑難解答
圖片精選