2012-07-19 97 views
58

可能重复:
How do I do variable variables in Python?使用字符串变量作为变量名

我有一个分配给它一个字符串变量,我想定义基础上,一个新的变量串。

foo = "bar" 
foo = "something else" 

# What I actually want is: 

bar = "something else" 
+14

你可能不想要那样。你为什么要这样做? – JBernardo 2012-07-19 04:03:39

+2

不,你不知道。你必须使用'exec'的原因是'locals()'不支持修改。 ''本地()'不支持修改,因为它会使实现更复杂和更慢,并且从不**是一个好主意 – 2012-07-19 04:04:38

+1

类似的帖子: http://stackoverflow.com/questions/1373164/因为他回答了这个问题(尽管它可能是一个糟糕的主意),但是我怎么做 - 变量 - 变量在python – Kartik 2012-07-19 04:08:16

回答

107

您可以使用exec为:

>>> foo = "bar" 
>>> exec(foo + " = 'something else'") 
>>> print bar 
something else 
>>> 
+52

+1。 – mgalgs 2013-06-25 03:39:47

+0

这是最好的答案,但它不适合我。也许这是由于我的范围。它工作在一个简单的文件中,就像你的例子中的文件一样,但是我在一个类的方法中尝试设置局部变量,并且它们没有被设置。 – sudo 2016-06-06 18:46:40

91

您将使用字典而不是更幸福:

my_data = {} 
foo = "hello" 
my_data[foo] = "goodbye" 
assert my_data["hello"] == "goodbye" 
+22

似乎没有解决这个问题。 – dnsmkl 2015-11-05 19:52:41

+2

是的。这可能会有所帮助,但这不是OP要求的。 – sudo 2016-06-06 18:52:37

+19

我很高兴看到答案仍在这里。我认为我们可以相信Stack Overflow读者自己判断一个答案是否符合他们的需求。这个答案没有提供“变量变量”,这是事实。但我保证,99%的人找到他们会更快乐地找到字典。 – 2016-06-06 23:55:58

59

您可以使用SETATTR

name= 'varname' 
value= 'something' 

setattr(self, name, value) #equivalent to: self.varname= 'something' 

print self.varname 
#will print 'something' 

但,因为你应该inf orm一个对象来接收新的变量,我认为这只能在类内工作。

+8

正确,它只能在课堂上使用。 – sudo 2016-06-06 18:53:53