装饰器通常把函数替换成另一个函数
#装饰器通常把函数替换成另一个函数
def deco(func):
def inner():
print("runnning inner()")
return inner #deco返回inner函数对象
@deco #使用deco装饰target
def target():
print('running target()')
target() #调用被装饰的target其实会运行inner
print(target) #审查对象,发现target现在是inner的引用
# runnning inner()
# <function deco.<locals>.inner at 0x0000000002895AE8>
装饰器的一大特性,能把被装饰的函数替换成其他函数。特性二,装饰器在加载模块时立即执行