在Python中从两个字符串创建变量名

10

我想在Python中从两个字符串创建一个变量名,例如:

 a = "column_number"
 b = "_url1"

然后,我希望能够获得一个名为"column_number_url1"的变量,以便我可以使用它。我知道这通常不是一个好主意 - 有许多帖子解释了为什么这是一个坏主意(例如:如何创建可变数量的变量?创建多个变量)- 我主要想这样做是因为所有这些变量都在代码的其他地方定义,并且想要一种简单的方法来重新访问它们(即不必创建数千个独特的变量,我同意使用字典等更好的方式)。据我所知,我在其他帖子中找到的答案都是做到这一点的另一种方法,而不是如何从两个字符串创建变量名。


a + b 有什么问题吗? - jonrsharpe
我想要将"a + b"作为一个变量名,这样理论上我可以执行"a + b" = 5,然后拥有一个名为"a + b"且值为5的变量。 - kyrenia
1
使用字典,将a+b作为键。 - Tim
2
这似乎是一个可怕的想法,正如你的研究已经给出的原因一样。 - jonrsharpe
3个回答

22
>>> a = "column_number"
>>> b = "_url1"
>>> x = 1234
>>> globals()[a + b] = x
>>> column_number_url1
1234

很少有文章解释如何做这件事的原因是(你可能已经了解)这是不明智的做法。我保证您的用例也不例外。

如果您没有注意到,globals()本质上是全局变量的字典。这意味着您一直应该使用字典来完成此操作;)


完美 - 谢谢,虽然我不反对这可能是个坏主意(也不认为我是“规则的例外”),但我很感激现在知道如何做到这一点 :-) - kyrenia
哦,我只是想加一下,我知道你得等待接受它 :-) - Tim

4

您可以使用字典:

a = "column_number"
b = "_url1"
obj = {}
obj[a+b] = None
print obj #{"column_number_url1": None}

另一种方法是使用 eval,但请注意在使用 eval/exec 时始终注意自己的行为:

a = "column_number"
b = "_url1"
exec(a+b+" = 0")
print column_number_url1 #0

eval是邪恶的


1

作为Joel答案的另一种选择,使用字典会更好:

a = "column_number"
b = "_url1"
data = {}

data[a+b] = 42

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接