【发布时间】:2019-10-07 18:31:28
【问题描述】:
我正在声明一个全局列表,作为列表元素定义的一部分,我需要引用来自其他模块的一些晦涩数据。我想在声明列表之前声明一些对这些外部变量的简单速记引用,但我不希望这些引用变量成为全局变量。
这一切可能听起来很混乱,所以这里有一个例子:
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),我不确定是否允许这样做。
感谢任何建议
【问题讨论】:
-
看看stackoverflow.com/q/1547145/5987是否有帮助。
-
你的意思是把函数定义为私有的吗?
-
是的,模块私有。
标签: python scope global-variables global