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

首頁 > 編程 > Python > 正文

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

2020-01-04 14:25:03
字體:
來源:轉載
供稿:網友

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

執行順序以圖片形式展示如下:

python,裝飾器,執行順序

先進入離test函數最近的裝飾器,由于裝飾器中返回的是函數的函數名引用,并非真正調用函數,所以先打印:

--out11--
--out12--
--out21--
--out22--

到inner2后,func會真正執行函數,會調用inner1(),所以再打印:

--in21--
--in11--

到inner1中,func會調用test函數,所以會打印:

--test--

再從各個函數出來后,會依次打印:

--in12--
--in22--

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

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


注:相關教程知識閱讀請移步到python教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 洪湖市| 莫力| 岗巴县| 湾仔区| 阳新县| 葫芦岛市| 亳州市| 德令哈市| 新野县| 岳普湖县| 扎赉特旗| 宁远县| 玉山县| 威宁| 通州区| 安西县| 晴隆县| 江陵县| 乌苏市| 宜章县| 筠连县| 连山| 磐安县| 郸城县| 丹巴县| 阳东县| 拉孜县| 昌吉市| 娱乐| 宜良县| 旺苍县| 桂阳县| 南宫市| 思茅市| 阜南县| 韩城市| 托克逊县| 元朗区| 汉源县| 贺州市| 江油市|