我编写了以下代码,尝试使用 exec() 来执行字符串中包含的代码。我传递一个空字典 d 作为 locals 参数。当我打印 d 时,正在 d 中创建本地命名空间。谁能帮我解释一下这是真的吗?
c = '''x = 1
def __init__(self,n):self.name = n
def printD(self):print(self.name)'''
d = {}
print(d)
exec(c,globals(),d)
print(d)
来自文档:
如果
获取两个单独的对象作为 globals 和 locals,则代码将像嵌入类定义中一样执行。exec
在类定义中,变量赋值会更新本地环境,而不是全局环境。所以你定义的名字会被放入字典中
d
。
如果您不通过
locals
字典,名称将在全局环境中定义。