我不知道“嵌套python装饰器?”是说出这个问题的正确方法,所以如果不是,请告诉我.
无论如何,我正在学习udacity,刚刚遇到一些涉及python decorator的代码,看起来像巫术魔法,所以现在我想问一个普遍的问题,看看我是否可以找出代码.
假设我有以下代码:
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),然后C = B(C).这意味着总的来说,我们得到C = A(B)(C),它可以解释为什么’blah’只打印一次.
但我确信这是最好的.
解决方法:
你的个人猜测是正确的.
当定义@ -line及其后续函数定义时,定义时将“调用”装饰器.
@foo
def bar():
pass
只是…的语法糖
def bar():
pass
bar = foo(bar)