I have written the following piece of code trying to use exec() to execute the code enclosed in the string. I pass an empty dictionary, d, as the locals parameter. When I print d, the local namespaces are being created in d. Can anyone help me explain that is really happening?
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)
From the documentation:
In a class definition, variable assignments update the local environment, not the global environment. So the names you define are put in the dictionary
d.If you don't pass the
localsdictionary the names will be defined in the global environment.