Python 3.x python不允许访问exec中的返回变量值集

Python 3.x python不允许访问exec中的返回变量值集,python-3.x,Python 3.x,这个函数运行得非常好。我认为在fn内部执行“A4=A4+1”而不指示A4是全局变量不会影响全局变量,因为每个函数都有自己的局部变量字典 如果需要将fn作为包含exec调用的单独函数,可以使用global关键字指定变量为全局变量 >>> def fn(sc): ... exec(sc) 或者,exec将接受传递给它的显式globals和locals字典。这些函数的帮助信息指出,通过更新locals(),无法可靠地更改变量的值,但可以使用globals()。只要globa

这个函数运行得非常好。

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

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

>>> def fn(sc):
...     exec(sc)
或者,
exec
将接受传递给它的显式
globals
locals
字典。这些函数的帮助信息指出,通过更新
locals()
,无法可靠地更改变量的值,但可以使用
globals()
。只要globals是您想要更新的,就不需要传递
locals()


大概OP将其简化为只调用
exec()
。显然,
fn
不仅仅是一个别名,因为名称空间目标不同。@khelwood如果我通过fn(“…”,globals(),globals()),会产生什么影响work@TooGeeky如果您不在函数中,那么就没有局部变量,因此
locals()
globals()
返回相同的结果。只要您只想更改全局变量,就可以传递
globals()
,因为这两个字典都可以使用。@khelwood Perfect:)谢谢。。。最后,有一些人真诚地帮助了我们。。。而不是仅仅按下(-1)按钮并将其标记为复制。谢谢你的努力,不客气。尝试起来很有趣。答案仍然是一样的:要么添加
global
语句,要么显式引用
globals()['A4']=A4+1
,要么告诉
exec()
要更新的本地名称空间。
>>> def fn(sc):
...   exec(sc)
...
>>> value = 1
>>> fn('value += 1')
>>> value
1
>>> fn('global value; value += 1')
>>> value
2
>>> def fn(sc):
...   exec(sc, globals())
...
>>> value = 1
>>> fn('value += 1')
>>> value
2