我在很多帖子中都读到全局变量很糟糕,但我需要它们!
我的情况:
我在专用模块中定义了很少的变量,这些变量每分钟更新一次,并由应用程序中的其他模块使用。 (在阅读this后实施),您认为这是一种好方法还是需要改进或更好的想法?
由于
答案 0 :(得分:4)
这听起来像pub/sub technique的好地方,在那里你有对象注意变化。当GUI需要在显示的值发生变化时更新某些小部件时,这在GUI等方面非常有用。
非常简单:
>>> class Widget(object):
def __init__(self, name, val):
self.name = name
self.val = val
def update(self, val):
self.val = val
print self.name, "changed to", self.val
>>> def update(updateables, val):
for u in updateables:
u(val)
>>> w1, w2 = Widget("Alpha", 5), Widget("Beta", 6)
>>> updateables = [w1.update, w2.update]
>>> update(updateables, 17)
Alpha changed to 17
Beta changed to 17
这个想法是值的“观察者”注册了一个回调,只要该值发生变化就会被调用。
答案 1 :(得分:0)
我认为没关系。你实际上并没有使用全局变量(例如,使用'global'关键字)。您正在导入模块,然后从其他模块访问该模块。对我来说似乎是一个很好的解决方案。
你走动了多少数据?因为您可以使用数据存储区,例如SQLite,并且每个模块都可以根据需要读取和写入数据存储区。但是,每分钟更新一次,您可能不需要持久性或关系,使您现有的解决方案更简单。
[稍后编辑]
想想看,内存中的SQLite数据库可能会在这里找到你的最佳点: http://www.sqlite.org/inmemorydb.html