python '键-值对' 转为 '变量-变量值对' locals()与globals()

如果得到一组键值对,即标准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 <module>
    function1()
    File "C:\Users\admin\Desktop\new.py", line 9, in function1    
    print(y)
NameError: name 'y' is not defined

这个例子中,成功修改了locals(),看似和谐,然而在实际调用y时,报错:y未定义。
因为locals()是只读的,修改locals()不会对局部变量/全局变量造成任何影响,任何试图通过locals()修改变量的操作都只能是镜花水月。



 



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值