@ 表示修飾符,可以在模塊或者類的定義層內對函數進行修飾。出現在函數定義的前一行,不允許和函數定義在同一行
def makebold(fn):
def warp():
return "<a>"+fn()+"<a>"
return warp
def makeitalic(fn):
def warp():
return "<b>"+fn()+"<b>"
return warp
@makebold #這句話相當於makebold(test1),也就是把當前函數傳過去
def test1():
return "test1"
@makeitalic
def test2():
return "test2"
@makebold
@makeitalic
def test3(): #函數和裝飾器是倒着執行的,從下往上
return "test3"
print(test1())
print(test2())
print(test3())
執行結果
<a>test1<a>
<b>test2<b>
<a><b>test3<b><a>