通常,如果我用这段代码运行这些脚本:
x=5
exec("x+=1")
output=str(x)
Run Code Online (Sandbox Code Playgroud)
如果我在python控制台中执行上述操作,则输出的值为"6"但是如果它在函数内部运行,则exec不会更改x的值.
为什么会发生这种情况,我怎样才能在功能中获得与在控制台中相同的行为?
WSGI与它无关.您运行的测试不是运行相同甚至类似的代码.这是您在非WSGI中创建的WSGI代码:
>>> def app():
... x=5
... exec("x+=1")
... print(x)
...
>>> app()
5
Run Code Online (Sandbox Code Playgroud)
如你所见,它也没有改变x.这样做的代码是这样的:
>>> x=5
>>> exec("x+=1")
>>> print(x)
6
Run Code Online (Sandbox Code Playgroud)
不同之处在于,在一种情况下,它是全局的,在另一种情况下是本地的.从文档:"不应尝试修改默认的本地词典."
您可以通过执行以下操作来更改全局:
x=5
def app():
exec("global x;x+=1")
print(x)
app()
Run Code Online (Sandbox Code Playgroud)
您可以通过明确地更改本地:
def app():
x=5
d = {'x': x}
exec("x+=1", d)
x = d['x']
print(x)
app()
Run Code Online (Sandbox Code Playgroud)
如果您有许多本地人需要访问,您可以使用d=locals().copy().
| 归档时间: |
|
| 查看次数: |
2320 次 |
| 最近记录: |