第一种,大家所熟知,表示修饰符,可以在模块或者类的定义层内对函数进行修饰。出现在函数定义的前一行,不允许和函数定义在同一行。在下面这种情况
def funcA(A):
print("function A")
print(A)
def funcB(B):
print(B(2))
print("function B")
@funcA
@funcB
def func(c):
print("function C")
return c**2
执行结果为
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())
执行结果为