如何确定变量是否在Python中声明?

时间:2010-04-09 11:40:15

标签: python variables singleton declaration

我想将模块用作其他模块中引用的单例。它看起来像这样(这实际上不是我正在处理的代码,但我简化它以丢弃所有不相关的东西):

main.py

import singleton
import printer

def main():
   singleton.Init(1,2)
   printer.Print()

if __name__ == '__main__':
   pass

singleton.py

variable1 = ''
variable2 = ''

def Init(var1, var2)
   variable1 = var1
   variable2 = var2

printer.py

import singleton

def Print()
   print singleton.variable1
   print singleton.variable2

我希望得到输出1/2,而是获得空的空间。据我所知,在将singleton导入print.py模块后,变量再次被初始化。

所以我认为我必须在singleton.py之前检查它们是否已经初始化了:

if not (variable1):
   variable1 = ''
if not (variable2)
   variable2 = ''

但我不知道该怎么做。或者有更好的方法在python中使用我不知道的单例模块:)

2 个答案:

答案 0 :(得分:7)

Init内的分配强制将变量视为本地变量。使用global关键字来解决此问题:

variable1 = ''
variable2 = ''

def Init(var1, var2)
   global variable1, variable2
   variable1 = var1
   variable2 = var2

答案 1 :(得分:2)

您可以使用de dictionaries vars globals

vars().has_key('variable1')

globals().has_key('variable1')

修改

也...

'variable1' in vars()

e.g。

if not 'variable1' in vars():
  variable1 = ''