简单的函数:
def cal_out(data):
return data`
一个调用它的函数
def cal_in():
for key,value in {"x1":1,"x2":2}.items():
locals()[key] = cal_out(value)
print(locals())
查看调用的情况
cal_in()
{'key': 'x2', 'value': 2, 'x1': 1, 'x2': 2}
调用后,名字空间里面有x1, x2.
现在加一句
def cal_in():
for key,value in {"x1":1,"x2":2}.items():
locals()[key] = cal_out(value)
print(locals())
print(x1,x2)
再调用
cal_in()
{'key': 'x2', 'value': 2, 'x1': 1, 'x2': 2}
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<stdin>", line 5, in cal_in
NameError: name 'x1' is not defined
为何会这样?名字空间里面明明有
locals()是只读的,它返回的是局部命名空间的拷贝,就是一个普通的字典,修改不会对局部的命名空间产生影响;
但是globals()全局命名空间时候可以修改的,修改它的值会对全局的命名空间产生影响。
这样是可以修改的,这里的locals()和globals()是完全一样的,修改locals()实际上就是在修改globals()的值。
参考地址:https://blog.csdn.net/sxingmi...