0

我知道我可以“按名称”向全局命名空间添加一个变量,例如:

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.

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

顺便说一句,字典的条目永远不会改变;它是严格输入的。而且,是的,我知道如果输入字典缺少函数所需的变量之一,我会遇到麻烦,但我认为可以处理。谢谢!

4

1 回答 1

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因为然后你会隐藏内置函数

于 2013-04-18T20:00:31.473 回答