2012-07-19 142 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