Python的exec函数在locals参数传递空字典时如何工作?
我写了下面这段代码,试图用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
接收到两个不同的对象作为globals和locals,那么代码的执行就像是在一个类定义里面一样。
在类定义中,给变量赋值会更新局部环境,而不是全局环境。所以你定义的名字会放在一个叫d
的字典里。
如果你不传递locals
字典,那么这些名字就会在全局环境中定义。