国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

python中多個裝飾器的執行順序詳解

2020-02-15 23:06:52
字體:
來源:轉載
供稿:網友

裝飾器是程序開發中經常會用到的一個功能,也是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 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()

執行結果如下:

"""
--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--

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

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

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 舞钢市| 乌鲁木齐市| 石狮市| 福贡县| 祁连县| 青海省| 大余县| 紫阳县| 永善县| 潞城市| 西林县| 农安县| 杂多县| 施甸县| 汶上县| 沛县| 南昌县| 南充市| 原阳县| 蚌埠市| 格尔木市| 仙游县| 泸定县| 财经| 靖宇县| 池州市| 根河市| 柘荣县| 独山县| 垦利县| 双鸭山市| 壶关县| 龙里县| 屯昌县| 平武县| 安阳市| 松滋市| 柯坪县| 土默特左旗| 华蓥市| 平乐县|