代码
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()
如有理解错误,望指出,谢谢!
参考内容

本文深入解析Python装饰器的工作原理,包括如何使用装饰器修改函数行为,以及装饰器内部的实现机制。通过具体代码示例,解释了@符号的用法,以及装饰器如何通过包裹原始函数来增加额外功能。

877

被折叠的 条评论
为什么被折叠?



