Использование 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_}