在python 3.2中使用exec

问题描述

| 所以通常如果我使用以下代码运行这些脚本:
x=5
exec(\"x+=1\")
output=str(x)
如果我在python控制台中执行上述操作,则输出值为\“ 6 \” 但是,如果它在函数内部运行,则exec不会更改x的值。 为什么会发生这种情况,如何在功能上获得与控制台相同的行为?     

解决方法

WSGI与它无关。您有效的测试未运行相同或相似的代码。这是非WSGI编写的WSGI代码:
>>> def app():
...     x=5
...     exec(\"x+=1\")
...     print(x)
... 
>>> app()
5
如您所见,它也不会更改
x
。这样做的代码是这样的:
>>> x=5
>>> exec(\"x+=1\")
>>> print(x)
6
区别在于,在一种情况下,它是全局的,在另一种情况下,它是局部的。从文档中:\“不应尝试对默认本地字典进行修改。\” 您可以通过执行以下操作更改全局:
x=5
def app():
    exec(\"global x;x+=1\")
    print(x)

app()
您可以通过显式地更改本地:
def app():
    x=5
    d = {\'x\': x}
    exec(\"x+=1\",d)
    x = d[\'x\']
    print(x)

app()
如果您需要访问许多本地人,则可以使用
d=locals().copy()
。