lin*_*r03 21 python global exec
为什么我不能使用exec()从函数内部更改全局变量?当赋值语句在exec()之外时,它工作正常.这是我的问题的一个例子:
>>> myvar = 'test' >>> def myfunc(): ... global myvar ... exec('myvar = "changed!"') ... print(myvar) ... >>> myfunc() test >>> print(myvar) test
Ale*_*lli 29
根据文档,该exec
语句采用两个可选表达式,默认为globals()
和locals()
,并始终在locals()
一个表达式中执行更改(如果有).
所以,只是更明确/具体/精确......:
>>> def myfunc():
... exec('myvar="boooh!"', globals())
...
>>> myfunc()
>>> myvar
'boooh!'
Run Code Online (Sandbox Code Playgroud)
......并且你将能够破坏全局变量到你心中的内容.
添加到亚历克斯的答案:尽管当您省略 locals/globals 参数时,它们默认为调用者的 locals 和 globals,但这只是一个方便的技巧;它不意味着他们继承呼叫者的全面执行上下文。特别是:
一种。嵌套的作用域单元不适用于 execed 代码。所以这失败了:
def f():
foo= 1
def g():
exec('print foo')
g()
f()
Run Code Online (Sandbox Code Playgroud)
湾 global
声明不会延续到 execed 代码中。因此,在您的示例中,默认情况下,写入的变量放在 locals 字典中。但是,您可以通过说使其工作
exec('global myvar\nmyvar = "changed!"')
Run Code Online (Sandbox Code Playgroud)
如果你能帮上忙,你不会真的想这样做。global
已经不好了,而且exec
本身就是一种代码气味!除非真的别无选择,否则您不会想要将它们组合起来。
归档时间: |
|
查看次数: |
10924 次 |
最近记录: |