Python 了解装饰师是如何工作的
我开始学习装饰师,我已经遇到了一个障碍。首先,这是我的代码Python 了解装饰师是如何工作的,python,python-3.x,decorator,Python,Python 3.x,Decorator,我开始学习装饰师,我已经遇到了一个障碍。首先,这是我的代码 def deco (f): def coucou(): print("this is function{}".format(f)) return f() return coucou @deco def salut(): print("salut") def hi(): return salut() 我会尽量用我糟糕的英语来解释我的问题。如果我理解的话,这就是事情
def deco (f):
def coucou():
print("this is function{}".format(f))
return f()
return coucou
@deco
def salut():
print("salut")
def hi():
return salut()
我会尽量用我糟糕的英语来解释我的问题。如果我理解的话,这就是事情应该发生的方式:我执行我的
hi()
函数,它返回sault()
,因为salt
被装饰者修改coucou
将被执行,coucou
返回<代码>礼炮(),我的意思是,我希望有一个无限循环,但那没有发生,我不明白为什么。有人能解释一下装饰师是如何工作的吗?coucou
中的f
是sall
的未装饰(原始)版本,是的,但是为什么和如何呢?同样,如果我得到了它,装饰程序会修改其定义中的函数,并使其永久指向装饰程序返回的函数,我错了吗?@newgatace它不会修改原始函数。它创建一个新函数,并返回一个新函数。因此,全局名称sault
现在指的是修饰符返回的函数,即coucou
,但是coucou
的本地名称f
,它是由coucou
关闭的自由变量,仍然指的是原始函数function@NewgateAce换句话说,,decorator语法没有什么神奇之处。它相当于def my_function():。。。;my_func=deco(my_func)
@juanpa.arrivillaga我现在明白了,f=deco(f)对我来说更清楚了。谢谢你的回复。@juanpa.arrivillaga我要说的可能很愚蠢,但当我打印“礼炮”和“装饰(礼炮)”时,它们没有相同的参考。。。这可能有助于理解decorators是如何工作的。您可能还需要查看文档:和。