繁体   English   中英

在函数中使用 exec 设置变量

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM