Python的exec函数在locals参数传递空字典时如何工作?

-1 投票
1 回答
14 浏览
提问于 2025-04-12 12:42

我写了下面这段代码,试图用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)

1 个回答

0

来自文档

如果exec接收到两个不同的对象作为globalslocals,那么代码的执行就像是在一个类定义里面一样。

在类定义中,给变量赋值会更新局部环境,而不是全局环境。所以你定义的名字会放在一个叫d的字典里。

如果你不传递locals字典,那么这些名字就会在全局环境中定义。

撰写回答