locals().update(dictionary) 没有添加所有变量

3 投票
1 回答
3764 浏览
提问于 2025-04-18 09:38

我一直在用字典对象来加载变量,但这些值会被更新。我这里缺少了什么呢?

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

最后一行是我遇到断言错误的地方。发生了什么事呢?

1 个回答

10

这是预期的行为,按照文档的说法:

这个字典的内容不应该被修改;因为修改可能不会影响解释器使用的局部和自由变量的值。

我认为,这其中一个原因是,变量是全局的还是局部的,在函数编译时就已经确定了。所以在:

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

最后的语句总是从全局变量中读取,因为局部变量并没有被声明。因此,动态添加局部变量会让事情变得更加复杂。

撰写回答