我不知道是否“嵌套 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,B 改变了 C。但我在理解这一点上有两个问题:
- C的确切性质。是
C = A(B)(C)
还是C = A(B(C))
? - 如果 C 确实受 A 影响,为什么在我运行上述代码时只打印一次“blah”?
个人猜测
实际上,既然我已经把它打出来了,我假设发生的事情是我们首先得到
:B = A(B)
然后. 这意味着总体而言,我们得到,它可以解释为什么 'blah' 只打印一次。 C = B(C)
C = A(B)(C)
但最好是我确定。