有限的exec:无法为变量赋值?

问题描述 投票:-2回答:1

有这个代码:

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上的全局变量/局部变量,我还有其他东西可以移除,所以它不允许更改变量吗?

附:虽然如果我修改字典它确实有效。它与不可变类型有关吗?

python python-3.x python-exec
1个回答
2
投票

这是发生了什么:

>>> x = 5
>>> loc = dict(x=x)
>>> exec('x += 5', {}, loc)
>>> print(loc)
{'x': 10}
>>> x
5
© www.soinside.com 2019 - 2024. All rights reserved.