使用eval更新局部变量?

时间:2017-11-14 18:33:42

标签: python eval

我想提供~/.node-gyp一些已编译的代码(通过eval),在评估时应该更新我传入的compile中的一些变量。

locals

1 个答案:

答案 0 :(得分:0)

可以这样做(它无论如何都适用于CPython 3.6.3),虽然不能更新locals()返回的字典(参见注意documentation

x = 5
code = compile("x = x * 2", "<string>", "single")
eval(code, locals())
print('x:', x)  # -> x: 10

请注意,@ juanpa.arrivillaga在评论中指出,在模块级别,locals()globals()相同 - 因此您可以通过使用它来避免限制。换句话说,eval(code, globals())会更好,避免出现问题。

(我在代码开头验证了他们与assert locals() == globals()相同,以验证它们是否相同。)