我不知道「嵌套的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
是的,我知道。這只是一個普遍的問題,而且寫起來更容易。 :) –