locals().update(словарь) не добавляет все переменные

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

assert "run_LMM" in all_variables.keys()
locals().update(all_variables)
assert "run_LMM" in locals()

Последняя строка, где я получил ошибку подтверждения. В чем дело?

1 ответ

Решение

Это ожидаемое поведение, по документам:

Содержание этого словаря не должно быть изменено; изменения могут не повлиять на значения локальных и свободных переменных, используемых интерпретатором.

Я думаю, что одной из причин этого является то, что переменная является глобальной или локальной, определяется во время компиляции функции, так что в:

def func():
    locals()['val'] = 1
    print val

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

Другие вопросы по тегам