Использование locals() внутри словаря

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

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

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

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

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

2 ответа

Решение

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

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

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

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

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

f_locals = locals()
dict_ = {x : f_locals[x] for x in list_}
Другие вопросы по тегам