代码
def outter(func):
def wrapper():
func()
print("after wrapper")
return wrapper
@outter
def inner():
print("inner")
inner()
结果
inner
after wrapper
首先,inner函数的内存地址作为参数传给outter函数,
然后通过wrapper函数对inner函数进行装饰,添加一些额外的功能,
最后将装饰后的函数wrapper的内存地址通过outter函数返回出来,赋给inner。
所以**@**的效果类似于代码inner = outter(inner)
即
def outter(func):
def wrapper():
func()
print("after wrapper")
return wrapper
def inner():
print("inner")
inner = outter(inner)
inner()
如有理解错误,望指出,谢谢!
参考内容