装饰器的理解运用

def my(func):
    def inner(*agrs,**kwargs):
        inner.i+=1
        return func(*agrs,**kwargs)
    inner.i = 0
    return inner
@my
def text():
    pass
text()
text()
text()
print(text.i)
  1. 在注释掉函数调用的时候
def my(func):
    print("aaaaaaa")

    def inner(*agrs,**kwargs):
        inner.i+=1
        return func(*agrs,**kwargs)
    inner.i = 0
    return inner
@my
def text():
    pass

# text()
# text()
# text()
# print(text.i)

执行结果
image
2. 取消上面代码注释后
执行结果为
image

由上面两个结果可以看出:

  1. 被装饰函数即使没有调用,装饰器也会执行最外层函数。
  2. 被装饰函数的调用,最外层函数也不会调用。只会调用inner 中的代码

这样说能理解吗?

1 Like