v.ki 发表于 2021-1-7 10:08:48

有关装饰器问题

装饰器前面的函数为什么要弄成闭包啊,普通函数也可以实现啊

suchocolate 发表于 2021-1-7 10:21:52

看起来只是进行了定义,没有调用。

kogawananari 发表于 2021-1-7 10:22:45

你还没执行被装饰的函数呢{:10_292:}

即便如此

def decorator(f):
print("my decorator")
return f

@decorator
def myfunc():
print("my function")

myfunc()
myfunc()
myfunc()

输出是
my decorator
my function
my function
my function

print('my decorator')由于不在return的函数里 只在第一次@的时候执行一次

v.ki 发表于 2021-1-7 10:43:58

kogawananari 发表于 2021-1-7 10:22
你还没执行被装饰的函数呢

即便如此


我知道了,如果是闭包的话@后面那个返回的是一个新的空间,而我这么弄,在@定义后已经执行了,再次用test()就会报错,因为test指向了@前面的函数而它需要一个参数

z5560636 发表于 2021-1-7 12:00:22

v.ki 发表于 2021-1-7 10:43
我知道了,如果是闭包的话@后面那个返回的是一个新的空间,而我这么弄,在@定义后已经执行了,再次用test ...

def a(x):
    def b(y):
      return x*y
    return b

num = a(1)      #此处num 等于个一个方法引用地址
print(num(10))#此处的num(1) 展开转换的是 b(1), 因此a(x)函数中的x,在b(y)中变得可用
页: [1]
查看完整版本: 有关装饰器问题