2014-04-22 80 views
0

今天,我發現我可以分配屬性的功能,但是當我試圖將屬性分配內部本身,我失敗:我可以爲其內部的函數分配屬性嗎?

>>> def a(): 
...  pass 
... 
>>> a.x = 1 
>>> a.x 
1 
>>> def b(): 
...  b.x = 2 
... 
>>> b.x 
AttributeError: 'function' object has no attribute 'x' 

是否有分配屬性裏面自己是一個函數的方法嗎?

如果沒有,函數屬性的用法是什麼?

回答

1

直到實際調用函數時纔會評估函數的主體;在您的示例中,b.x不存在,直到b被調用至少一次。

一種用法是模擬C風格的靜態變量,其值在調用函數之間保持不變。一個簡單的例子是計算函數被調用的次數。

def f(): 
    f.count += 1 
    print "Call number {0}".format(count) 
f.count = 0 

注意,是沒有問題的,從裏面count分配給f.count,但f被定義後,因爲f不存在此之前必須進行初始分配。

+0

函數屬性的用法是什麼? – Zen

+0

我認爲有一個例外,我可以在函數本身中分配__doc__屬性,並且可以像上面提到的'b.x'一樣獲取它。 – Zen

+0

區別在於'__doc__'(以及其他一些屬性)是由'def'語句本身預定義的。 – chepner

相關問題