下面是一段简单的代码,通过使用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
的文档说:
注意:这个字典的内容不应该被修改;解释器所使用的局部变量和自由变量的值不会受到影响。