我正在声明一个全局列表,作为列表元素定义的一部分,我需要引用来自其他模块的一些晦涩数据。我想在声明列表之前声明一些对这些外部变量的简单速记引用,但我不希望这些引用变量成为全局变量。
这一切可能听起来很令人困惑,所以这里有一个例子:
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
以外的任何全局变量。由于这是在全局范围内发生的,prj
、ent
和elm
也将成为全局变量。有没有办法在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