国产探花免费观看_亚洲丰满少妇自慰呻吟_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--

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

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

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 辉县市| 通山县| 芮城县| 连山| 龙游县| 耒阳市| 丽江市| 溧阳市| 建昌县| 柞水县| 淮南市| 广汉市| 石河子市| 涞水县| 庆安县| 曲沃县| 南昌市| 溧阳市| 白朗县| 商城县| 界首市| 临夏市| 柘城县| 海南省| 达日县| 锡林浩特市| 合山市| 陇西县| 浮梁县| 泗水县| 尉犁县| 南宫市| 盘山县| 女性| 拜城县| 甘南县| 潼关县| 突泉县| 左权县| 米泉市| 吴江市|