2013-10-17 46 views
5

考慮下面的代碼:直接分配一個變量的函數在Python

def apples(): 
    print(apples.applecount) 
    apples.applecount += 1 

apples.applecount = 0 
apples() 
>>> 0 
apples() 
>>> 1 
# etc 

這是一個好主意,壞主意或者我應該只是毀滅自己? 如果你想知道我爲什麼要這樣做,我有一個函數每4秒重複一次,使用win32com.client.Dispatch()它使用Windows COM連接到應用程序。我認爲沒有必要每4秒重新創建一次該鏈接。 我當然可以使用全局變量,但我想知道這是否也是一種有效的方法。

回答

4

它基本上是一個命名空間的全局。您的功能apples()是一個全局對象,並且該對象的屬性不亞於全局。

它只比常規的全局變量略好一點;畢竟,命名空間通常是一個好主意。

5

這將是更地道使用一個類的實例變量來計數:

class Apples: 
    def __init__(self): 
     self._applecount = 0 

    def apples(self): 
     print(self._applecount) 
     self._applecount += 1 

a = Apples() 
a.apples() # prints 0 
a.apples() # prints 1 

如果您需要引用只是函數本身,而不a參考,你可以這樣做:

a = Apples() 
apples = a.apples 

apples() # prints 0 
apples() # prints 1 
+1

很棒的建議。基本上,當你想把狀態(以顯式變量的形式)和功能放在一起時,你想要的通常是一個類。 – abarnert

相關問題