将“按名称”变量添加到本地名称空间

时间:2013-04-18 19:55:33

标签: python dictionary namespaces global local

我知道我可以使用类似的东西“按名称”向全局命名空间添加变量:

def getNewVar(name,val):
    globals()[name]=val

事情是,我想在本地命名空间中执行此操作。我已经尝试过使用locals()代替globals()但未能成功。有人可能想知道为什么我会做这样的事情。好吧,在我的用例中,函数的参数实际上是一个字典,我想做的事情如下:

def processDictEntries(dict):
    for varname in dict.keys():
        locals()[varname]=dict[varname]  # won't work, of course

这样,在函数中,我不必继续输入

result1=dict['var1']+5.
result2=dict['var2']*dict['var7']

一遍又一遍。我可以输入

result1=var1+5
result2=var2*var7

并且,如果有一种方法可以像我写的那样在一个小循环中执行此操作,那么我不必这样做:

var1=dict['var1']
var2=dict['var2'] etc.

任一。我真的只是在寻找经济的代码;这是一本很大的字典。

BTW,词典的条目永远不会改变;这是严格的输入。并且,是的,我知道如果输入字典缺少函数所需的变量之一,我会处于错误状态,但我认为可以处理。谢谢!

1 个答案:

答案 0 :(得分:2)

如果您可以更改调用该函数的方式:

def processDictEntries(var1=None,var2=None,**kwargs):
    #do stuff with var1,var2 ...

然后将函数调用为:

processDictEntries(**dict)

当然,如果你不能这样做,你总是可以使用processDictEntries作为包装器:

def _processDictEntries(var1=None,var2=None,**kwargs):
    ...

def processDictEntries(d):
    return _processDictEntries(**d)

作为旁注,命名变量dict不是一个好主意,因为那时你会影响内置函数