использование locals () внутри словаря - PullRequest
5 голосов
/ 01 ноября 2010

Следующий код не работает, я полагаю, потому что переменная locals () внутри понимания будет ссылаться на вложенный блок, где оценивается понимание:

def f():
    a = 1
    b = 2
    list_ = ['a', 'b']
    dict_ = {x : locals()[x] for x in list_}

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

Есть ли что-нибудь, что могло бы сделать словарь использующимпеременные точно в объеме функции f?

Примечание: я делаю это, потому что у меня есть много переменных, которые я хотел бы добавить в словарь позже, но не хочу усложнять код, написав dict_['a'] вместо a вТо время.

Ответы [ 2 ]

4 голосов
/ 01 ноября 2010

Возможно, вы могли бы сделать это:

def f(): 
    a = 1 
    b = 2 
    list_ = ['a', 'b'] 
    locals_ = locals()
    dict_ = dict((x, locals_[x]) for x in list_)

Однако я бы настоятельно не рекомендовал использовать locals() для этой цели.

1 голос
/ 01 ноября 2010

Я полагаю, что вы правы: locals() в понимании dict будет ссылаться на пространство имен понимания.

Одно из возможных решений (если оно вам еще не пришло):

f_locals = locals()
dict_ = {x : f_locals[x] for x in list_}
...