有这个代码:
x = 10
exec('x += 5', {}, {'x': x})
print(x) # prints 10.
# This works of course
exec('x += 5')
print(x) # prints 15.
为什么它忽略了我的x += 5
表达?通过限制exec
上的全局变量/局部变量,我还有其他东西可以移除,所以它不允许更改变量吗?
附:虽然如果我修改字典它确实有效。它与不可变类型有关吗?
这是发生了什么:
>>> x = 5
>>> loc = dict(x=x)
>>> exec('x += 5', {}, loc)
>>> print(loc)
{'x': 10}
>>> x
5