如果得到一组键值对,即标准dict格式
dictA={'key1':'value1','key2':'value2','key3':'value3'}
将其转为变量,通常需要这样写:
key1=dictA['key1']
key2=dictA['key2']
key3=dictA['key3']
不仅繁杂,而且写了很多重复代码,总感觉哪里吃亏……
所以应该使用python内置的函数globals()
globals()以可写形式返回以全局变量与其变量值组成的键值对组,即dict类型,修改globals()等同于修改'变量-变量值对'。
使用dict类型的update方法,我们可以将代码修改如下:
globals().update(dictA)
这样,dicA中所有的键-值对都已经定义为 '变量-变量值',验证一下:
dictA={'key1':'value1','key2':'value2','key3':'value3'}
globals().update(dictA)
print(key1,key2,key3)
运行结果:
value1 value2 value3
成了!在这个例子中,没有进行显式地定义key1,key2,key3,但是添加入globals()中后,我们可以直接使用,没有任何问题!
尤其在得到的字典很长的时候,要写十几行的冗余代码可以直接一句带过。
偷懒虽然可耻,但是好用~!
----------------------------------------------------------------------------------------------------------------------
至于locals():
locals()以只读形式返回局部变量与其变量值组成的键值对组,即dict类型。修改locals()不会对局部变量产生任何作用。
改动locals(),为其添加y=3
def function1(x=None):
print('raw-locals',locals())
locals().update({'y':'3'})
print('new-locals',locals())
print(y)
function1()
运行结果如下:
raw-locals {'x': None}
new-locals {'x': None, 'y': '3'}
Traceback (most recent call last):
File "C:\Users\admin\Desktop\new.py", line 10, in
function1()
File "C:\Users\admin\Desktop\new.py", line 9, in function1
print(y)
NameError: name 'y' is not defined