Python:将字典中的variables加载到命名空间中
我想在函数之外使用一堆定义在函数中的局部variables。 所以我传递x=locals()
在返回值。
如何将该字典中定义的所有variables加载到函数外部的命名空间中,以便不使用x['variable']
访问该值,而只需使用variable
。
考虑一下Bunch
select:
class Bunch(object): def __init__(self, adict): self.__dict__.update(adict)
所以如果你有一个字典d
并想用x.foo
而不是clumsier d['foo']
来访问(读取)它的值,
x = Bunch(d)
这既适用于内部函数也适用于外部函数 – 而且它比注入globals()
更加清洁和安全。 请记住Python的Zen的最后一行…:
>>> import this The Zen of Python, by Tim Peters ... Namespaces are one honking great idea -- let's do more of those!
只要知道他/她在做什么,就可以将一个本地空间中的variables导入另一个本地空间。 我曾多次看到这样的代码被有用的使用。 只需要小心,不要污染共同的全球空间。
您可以执行以下操作:
adict = { 'x' : 'I am x', 'y' : ' I am y' } locals().update(adict) blah(x) blah(y)
将variables导入到本地名称空间是一个有效的问题,通常在模板框架中使用。
返回一个函数的所有局部variables:
return locals()
然后导入如下:
r = fce() for key in r.keys(): exec(key + " = r['" + key + "']")
总是有这个选项,我不知道这是最好的方法,但它确实工作。 假设type(x)= dict
for key, val in x.items(): # unpack the keys from the dictionary to individual variables exec (key + '=val')