1

重写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 设置为函数本身?

4

3 回答 3

1

您不能以这种方式以编程方式创建局部变量。

相反,只需通过访问其键直接使用字典。

于 2013-08-28T03:25:27.327 回答
1

您可以做的是使用字典作为局部变量来评估您的表达式:

def func(c,d):
    print eval('a+b+c',globals(),dict(d,c=c))

func(3,dict(a=1,b=2))
于 2013-08-28T03:31:30.500 回答
1

您可以使用语句in的子句exec。在in子句中,您可以提供命名空间供 Python 在执行字符串时进行搜索。文档


例如:

>>> d = dict(a=1, b=2)
>>> def func(c,d):
        exec 'print a+b+c' in d, locals()


>>> func(5,d)
8
于 2013-08-28T03:43:05.337 回答