简述
@表示修饰符,可以在模块或者类的定义层内对函数进行修饰。出现在函数定义的前一行,不允许和函数定义在同一行。一个修饰符就是一个函数,它将被修饰的函数作为参数,并返回修饰后的同名函数或其他可调用的东西(如果返回不是一个可调用的对象,就会报错).
实例
demo1
# One
print("One---------------------------")
def funA1(desA1):
print("It's funA1")
def funB1(desB1):
print("It's funB1")
@funA1
def funC1():
print("It's funC1")
输出:
'''
One---------------------------
It's funA1
'''
demo2
该demo中等价于test(xxx()).
# Two
print("Two---------------------------")
def test2(func2):
print("a")
return func2()
@test2
def xxx2():
print('Hello World!')
输出:
'''
Two---------------------------
a
Hello World!
'''
demo3
嵌套写法
# Three
print("Three-------------------------")
def funA3(desA3):
print("It's funA3")
print(desA3)
desA3()
def funB3(desB3):
print("It's funB3")
@funB3
@funA3
def funC3():
print("It's funC3")
输出:
'''
Three-------------------------
It's funA3
<function funC3 at 0x00000122AC5E8940>
It's funC3
It's funB3
'''
解释:
该代码等价于 funB3(funA3(funC3()));执行顺序从里面往外面执行.