[英]Setting variables with exec inside a function
我刚开始自学 Python,我需要一些关于这个脚本的帮助:
old_string = "didnt work"
new_string = "worked"
def function():
exec("old_string = new_string")
print(old_string)
function()
我想得到它old_string = "worked"
。
您快到了。 您正在尝试修改全局变量,因此您必须添加global
语句:
old_string = "didn't work"
new_string = "worked"
def function():
exec("global old_string; old_string = new_string")
print(old_string)
function()
如果您运行以下版本,您将看到您的版本中发生了什么:
old_string = "didn't work"
new_string = "worked"
def function():
_locals = locals()
exec("old_string = new_string", globals(), _locals)
print(old_string)
print(_locals)
function()
输出:
didn't work
{'old_string': 'worked'}
你运行它的方式,你最终试图在exec
中修改函数的局部变量,这基本上是未定义的行为。 请参阅exec
文档中的警告:
注意:默认locals的行为如下面函数
locals()
所述:不应尝试修改默认locals字典。 如果您需要在函数exec()
返回后查看代码对局部变量的影响,请传递显式局部变量字典。
以及有关locals()
的相关警告:
注意:不得修改本词典的内容; 更改可能不会影响解释器使用的局部变量和自由变量的值。
作为让exec
从函数内部更新全局变量的另一种方法是将globals()
传递给它。
>>> def function(command):
... exec(command, globals())
...
>>> x = 1
>>> function('x += 1')
>>> print(x)
2
与locals()
不同,更新globals()
字典应该总是更新相应的全局变量,反之亦然。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.