重写python程序时遇到的问题。
我将一些以前的全局变量移到一个字典中,所以我必须重写使用这些变量的函数。
例如,
#old one
a, b = 1, 2
def func(c):
print a+b+c
#new one
d = dict(a=1,b=2)
def func(c,d):
a = d['a']
b = d['b']
print a+b+c
由于字典d 很大,所以我正在寻找类似这样的东西
d = dict(a=1,b=2)
def func(c,d):
locals().update(d)
print a+b+c
我已尝试__dict__.update(d)
,但无法直接访问__dict__
。
或for key,value in d.items():
setattr(obj,key,value)
有可能吗?如果是,如何将obj设置为函数本身?
答案 0 :(得分:4)
在函数调用中将dict扩展为关键字参数。这将把d成员加入当地人。
d = dict(a=1, b=2)
def func(c, **kw):
print a+b+c
func(c, **d)
答案 1 :(得分:1)
您不能以这种方式以编程方式创建局部变量。
相反,只需通过访问其密钥即可直接使用字典。
答案 2 :(得分:1)
您可以做的是使用字典作为局部变量来评估您的表达式:
def func(c,d):
print eval('a+b+c',globals(),dict(d,c=c))
func(3,dict(a=1,b=2))
答案 3 :(得分:1)
您可以使用in
声明的 exec
子句。在in
子句中,您可以提供Python的名称空间,以便在执行字符串时进行搜索。 Documentation
例如:
>>> d = dict(a=1, b=2)
>>> def func(c,d):
exec 'print a+b+c' in d, locals()
>>> func(5,d)
8