变量存在于 locals() 中,但无法在当前局部范围内访问



下面是一段简单的代码,通过使用exec()g()范围内生成变量b:

def g():
print("Locals:", locals().keys())
exec("b=1")
print("Locals:", locals().keys())
print(locals()['b'])
print(b)
g()

输出:

Locals: dict_keys([])
Locals: dict_keys(['b'])
1
Traceback (most recent call last):
File "test.py", line 10, in <module>
g()
File "test.py", line 8, in g
print(b)
NameError: name 'b' is not defined

locals()中存在变量b。为什么不能访问b?我正在使用Python 3.8.10

exec的文档说:

注意:默认的locals就像下面locals()函数中描述的那样:不应该尝试修改默认的locals字典。如果需要在函数exec()返回后查看代码对locals的影响,则传递一个显式的locals字典。

locals的文档说:

注意:这个字典的内容不应该被修改;解释器所使用的局部变量和自由变量的值不会受到影响。

最新更新