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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

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

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

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

使用場景

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

引入日志

函數執行時間統計

執行函數前預備處理

執行函數后清理功能

權限校驗等場景

緩存

今天講一下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--

合起來就是上面的執行結果。

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

總結

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

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。