裝飾器是程式開發中經常會用到的乙個功能,也是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)
prin程式設計客棧t("--in22--")
return ret
print("--out22")
return inner2
@wrapper_out2
@wrapper_out1
def test():
pri程式設計客棧nt("--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--
--in2jkaxsmyqp2--
合起來就是上面的執行結果。
本文標題: python中多個裝飾器的執行順序詳解
本文位址: /jiaoben/python/241131.html
python中多個裝飾器的執行順序
1.執行順序 當乙個程式裡面有多個裝飾器的時候如何執行的呢,借助乙個程式來理解一下 def decorator a func print get in decorator a def inner a args,kwargs print get in inner a res func args,kwa...
python 中多個裝飾器的執行順序
python 中多個裝飾器的執行順序 def inner1 args,kwargs print in inner1 ret f1 args,kwargs print 111 return ret return inner1 def inner2 args,kwargs print in inner2...
Python 多個裝飾器的執行順序
一.多個裝飾器的的執行順序 接下來我們以例子來檢視執行順序 def decorator a func print get in decorator a def inner a args,kwargs print get in inner a res func args,kwargs return r...