日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > python >内容正文

python

python装饰器的顺序_python中多个装饰器的执行顺序详解

發(fā)布時(shí)間:2023/12/2 python 43 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python装饰器的顺序_python中多个装饰器的执行顺序详解 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

裝飾器是程序開發(fā)中經(jīng)常會用到的一個(gè)功能,也是python語言開發(fā)的基礎(chǔ)知識,如果能夠在程序中合理的使用裝飾器,不僅可以提高開發(fā)效率,而且可以讓寫的代碼看上去顯的高大上^_^

使用場景

可以用到裝飾器的地方有很多,簡單的舉例如以下場景

引入日志

函數(shù)執(zhí)行時(shí)間統(tǒng)計(jì)

執(zhí)行函數(shù)前預(yù)備處理

執(zhí)行函數(shù)后清理功能

權(quán)限校驗(yàn)等場景

緩存

今天講一下python中裝飾器的執(zhí)行順序,以兩個(gè)裝飾器為例。

裝飾器代碼如下:

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()

執(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會真正執(zhí)行函數(shù),會調(diào)用inner1(),所以再打印:

--in21--

--in11--

到inner1中,func會調(diào)用test函數(shù),所以會打印:

--test--

再從各個(gè)函數(shù)出來后,會依次打印:

--in12--

--in22--

合起來就是上面的執(zhí)行結(jié)果。

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

總結(jié)

以上是生活随笔為你收集整理的python装饰器的顺序_python中多个装饰器的执行顺序详解的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。