我想知道是否可以通过字典处理变量。
示例:
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
谢谢大家,你的回答给了一些好主意。
答案 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