Python: как определить переменные в глобальном пространстве, не определяя их как глобальные - PullRequest
0 голосов
/ 07 октября 2019

Я объявляю глобальный список, и как часть определения элемента списка, мне нужно сослаться на некоторые неясные данные из других модулей. Я хотел бы объявить несколько простых кратких ссылок на эти внешние переменные непосредственно перед объявлением списка, но я не хочу, чтобы эти ссылочные переменные стали глобальными переменными.

Возможно, все это звучит очень запутанно, поэтому здесьэто пример:

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 очень текстовый (интервал = область действия), я не был уверен, что что-то подобное будет разрешено.

Я ценю любые советы

1 Ответ

1 голос
/ 07 октября 2019

Один из способов сделать это - удалить переменные из глобального пространства имен, когда они вам больше не нужны:

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
...