Python:将字典中的variables加载到命名空间中

我想在函数之外使用一堆定义在函数中的局部variables。 所以我传递x=locals()在返回值。

如何将该字典中定义的所有variables加载到函数外部的命名空间中,以便不使用x['variable']访问该值,而只需使用variable

考虑一下Bunchselect:

 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')