Python:如何在全局空间中定义变量而不将它们定义为全局变量



我正在声明一个全局列表,作为列表元素定义的一部分,我需要引用来自其他模块的一些晦涩数据。我想在声明列表之前声明一些对这些外部变量的简单速记引用,但我不希望这些引用变量成为全局变量。

这一切可能听起来很令人困惑,所以这里有一个例子:

prj = book.OverrideLevel.PROJECT
ent = book.OverrideLevel.ENTITY
elm = book.OverrideLevel.ELEMENT
list = [OvrType( 3, prj, "OutTypes" ),
OvrType( 4, prj, "FilePrefix" ),
OvrType( 5, ent, "FileSuffix" ),
OvrType( 6, ent, "World" ),
OvrType( 7, ent, "Anim" ),
OvrType( 8, ent, "Armature" ),
OvrType( 9, ent, "MeshData" ),
OvrType( 10, elm, "General" ),
OvrType( 11, elm, "ObjPrefix" ),
OvrType( 12, elm, "ObjSuffix" ) ]

在示例中,我想避免定义除list以外的任何全局变量。由于这是在全局范围内发生的,prjentelm也将成为全局变量。有没有办法在Python中避免这种情况?也许通过将列表定义为空 (list = [](,然后创建一个 +1 范围,并在那里定义列表内容?我只是不知道该怎么做。

我考虑过的一件事是创建一个函数,然后立即调用它:

list = []
def BuildList():
prj = book.OverrideLevel.PROJECT
ent = book.OverrideLevel.ENTITY
elm = book.OverrideLevel.ELEMENT
global list    
list = [OvrType( 3, prj, "OutTypes" ),
.... ]
BuildList()

会有更好的方法吗?我知道有些语言允许您出于任何需要的原因手动添加范围。但是由于Python是如此的文本驱动(spacing=scope(,我不确定是否允许这样的事情。

我感谢任何建议

一种方法是在不再需要变量时从全局命名空间中删除变量:

prj = book.OverrideLevel.PROJECT
ent = book.OverrideLevel.ENTITY
elm = book.OverrideLevel.ELEMENT
list = [OvrType( 3, prj, "OutTypes" ),
OvrType( 4, prj, "FilePrefix" ),
...
]
del prj, ent, elm

相关内容

  • 没有找到相关文章

最新更新