使用字典来处理变量

时间:2011-12-15 21:53:02

标签: python pointers dictionary

我想知道是否可以通过字典处理变量。

示例:

global MyVar
...
MyVar = 0xFFFF
d={"MyVar":MyVar}
def ChangeVar (var_to_change, value)
 d[var_to_change] = value #I know this code assigns a new value to the key...
...
ChangeVar("MyVar",25)
...

我想用字典“选择”我要修改的变量。我总是可以使用数组,但我想知道是否有可能实现这一点。我对Python中的指针知之甚少。

在C中会是这样的(也许我写了一个额外的或错过了'*'):

int MyCVar = 0;
int MyCVar2 = 0;
int *MyD[] = {&MyCVar,&MyCVar2};
...
*(MyD[index]) = some_value;

我希望你明白我要解释的内容。

谢谢,

Jonathan

编辑: 谢谢大家的答案。我试图做的事情有点难,因为python处理的名称和对象完全不同。我做的是这样的:

class mytype(object):
   def __init__(self,name=""):
      self.__Name = name
      ....
      myDict[name] = self

然后我可以使用变量的 Name 访问所有对象。这是我试图在第一个例子中解释的行为。这就是我访问这些对象的方式。

myDict["MyVar"].Value = 1

谢谢大家,你的回答给了一些好主意。

3 个答案:

答案 0 :(得分:1)

是的,我认为@JBernardo有正确的想法。

盯着你的代码片刻后试试&弄清楚你到底想要做什么:

您是否正在尝试创建所有变量名称的字典,并将该字典用作更改值的查找表?

http://docs.python.org/library/functions.html#globals

 globals()["MyVar"] = 25

将全局MyVar重新分配给整数值25

答案 1 :(得分:1)

在python中,所有本地(和全局)变量都已放入字典中,因此您可以访问这些字典。

你可以通过在函数中使用locals()和globals()来实现。

即:

locals()['x'] = 'whatever'

但不推荐:

  

不应修改此词典的内容;更改可能不会影响解释器使用的局部变量的值。

来自doc

失败时的简单案例:

def test():
    a = 'a'
    locals()['a'] = 'b'
    print a
test()

globals(),otoh可以安全修改。

答案 2 :(得分:0)

在Python中,没有糖可以获得双指针语义。你需要传递一些引用,它可以改变你想要的值。例如,您的字典可以存储一个可以访问MyVar并可以更改它的函数。

MyVar = 5
def ChangeMyVar(value):
    global MyVar
    MyVar = value
d['MyVar'] = ChangeMyVar

# later..
d['MyVar'](10)

你最好设计这个以传递一个包裹你关心的实际值的对象。

class WrappedVar(object):
    def __init__(self, val):
        self.value = val

MyVar = WrappedVar(5)
d['MyVar'] = MyVar

# later..
d['MyVar'].value = 10