我不知道“嵌套的python装饰器?”是阐明这个问题的正确方法,所以让我知道它不是。嵌套的python装饰器?
无论如何,我在udacity上学了一门课,刚刚遇到一些涉及python装饰器的代码,看起来像伏都教魔法,所以现在我想问一个概括性的问题,看看我能不能找出代码。
假设我有以下代码:
def A(f):
print 'blah'
return f
@A
def B(f):
return f
@B
def C():
pass
现在,据我所知,从上面的代码中,装饰使B钮可分为:
B = A(B)
,这是一个装饰做了什么。但是,C是什么样的? 从我已经看到了一些小样本代码,不知何故C被A,因为A改变乙影响和B改变C.但是我有两个问题,理解这一点:
- 下的确切性质是它
C = A(B)(C)
或C = A(B(C))
? - 如果C确实受到A的影响,为什么只有在运行上面的代码时才打印一次'blah'?
个人猜测
其实,现在我已经输入出来,我推测,发生的事情是,我们首先得到: B = A(B)
和然后C = B(C)
。这意味着整体而言,我们得到了C = A(B)(C)
,这就可以解释为什么'blah'只能打印一次。
但我最好确定一下。
你的装饰实际上并没有做任何装饰的功能,让你的第二个例子等同于'B = B'和你的第三个例子与“C = C”相同。 (有印刷物的副作用,但不影响功能。) – kindall
是的,我知道。这只是一个普遍的问题,而且写起来更容易。 :) –