请考虑以下代码:
def apples():
print(apples.applecount)
apples.applecount += 1
apples.applecount = 0
apples()
>>> 0
apples()
>>> 1
# etc
这是一个好主意,坏主意还是我应该摧毁自己?
如果你想知道为什么我会想要这个,我有一个函数每4秒重复一次,使用win32com.client.Dispatch()
它使用windows COM连接到一个应用程序。我认为没有必要每4秒重新创建一次链接。
我当然可以使用全局变量,但我想知道这是否也是一个有效的方法。
答案 0 :(得分: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 :(得分:4)
它基本上是一个命名空间全局。您的函数apples()
是一个全局对象,该对象的属性也不亚于全局。
它仅略微优于常规全局变量;毕竟,名称空间通常都是个好主意。