【问题标题】:Python: How to define variables in global space without defining them as globalsPython:如何在全局空间中定义变量而不将它们定义为全局变量
【发布时间】: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 之外的任何全局变量。由于这发生在全局范围内,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),我不确定是否允许这样做。

感谢任何建议

【问题讨论】:

标签: python scope global-variables global


【解决方案1】:

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

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

【讨论】:

  • 我不知道这是可能的。谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-09-17
  • 1970-01-01
  • 2021-03-13
  • 2014-12-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多