5

考虑以下代码:

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

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

这是一个好主意,坏主意还是我应该摧毁自己?如果你想知道我为什么想要这个,我有一个功能每 4 秒重复一次,使用win32com.client.Dispatch()它使用 Windows COM 连接到应用程序。我认为没有必要每 4 秒重新创建一次该链接。我当然可以使用全局变量,但我想知道这是否也是一种有效的方法。

4

2 回答 2

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
于 2013-10-17T21:30:09.153 回答
4

它基本上是一个命名空间的全局。您的函数apples()是一个全局对象,并且该对象上的属性同样具有全局性。

它只比普通的全局变量稍微好一点;毕竟,命名空间通常是个好主意。

于 2013-10-17T21:26:40.230 回答