python不允许访问在exec中设置的变量值

时间:2018-08-24 21:47:38

标签: python-3.x

>>> def fn(sc):
...     exec(sc)

此功能运行正常。

1 个答案:

答案 0 :(得分:1)

我认为在"A4 = A4+1"内执行fn而不表明A4是全局变量不会影响全局变量,因为每个函数都有其自己的局部变量字典。

如果您需要fn是包含exec调用的单独函数,则可以使用global关键字将变量指定为全局变量。

>>> def fn(sc):
...   exec(sc)
...
>>> value = 1
>>> fn('value += 1')
>>> value
1
>>> fn('global value; value += 1')
>>> value
2

或者,exec将接受传递给它的显式globalslocals字典。这些功能的帮助信息指出,您无法通过更新locals()来可靠地更改变量的值,但是您可以globals()来。只要要更新全局变量,就不需要传递locals()

>>> def fn(sc):
...   exec(sc, globals())
...
>>> value = 1
>>> fn('value += 1')
>>> value
2