我知道我可以使用类似的东西“按名称”向全局命名空间添加变量:
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,词典的条目永远不会改变;这是严格的输入。并且,是的,我知道如果输入字典缺少函数所需的变量之一,我会处于错误状态,但我认为可以处理。谢谢!答案 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
不是一个好主意,因为那时你会影响内置函数