使用字符串变量作为变量名

9-b*_*its 100 python

可能重复:
如何在Python中执行变量变量?

我有一个变量,并为其分配了一个字符串,我想根据该字符串定义一个新变量.

foo = "bar"
foo = "something else"   

# What I actually want is:

bar = "something else"
Run Code Online (Sandbox Code Playgroud)

Jac*_*eow 175

你可以用exec它:

>>> foo = "bar"
>>> exec(foo + " = 'something else'")
>>> print bar
something else
>>> 
Run Code Online (Sandbox Code Playgroud)

  • +1,因为他回答了这个问题(尽管这个想法很糟糕). (79认同)
  • 注意使用 `exec` / `eval` 是 [被认为是不好的做法](/sf/answers/128307021/)。我还没有遇到一个有用的用例,并且*通常*有更好的替代方案,例如`dict`。 (5认同)
  • @mgalgs 为什么这是个坏主意?这个解决方案有什么不好的影响吗?提前致谢。 (4认同)

Ned*_*der 124

你会更乐意使用字典:

my_data = {}
foo = "hello"
my_data[foo] = "goodbye"
assert my_data["hello"] == "goodbye"
Run Code Online (Sandbox Code Playgroud)

  • 我很高兴看到答案仍在这里.我认为我们可以信任Stack Overflow读者自己判断答案是否符合他们的需求.这个答案没有提供"变量变量",这是事实.但我向你保证,99%寻找他们的人会更乐意找到词典. (39认同)
  • 它似乎没有解决这个问题. (34认同)
  • 它没有直接回答这个问题,但是,人们可能会问这个问题而忽略他们可以使用字典来达到同样的目的 (6认同)
  • 是.这可能会有所帮助,但这不是OP所要求的. (5认同)
  • “我冷啊,我怎么能把房子着火呢?” (4认同)

Gus*_*gas 79

您可以使用 setattr

name  = 'varname'
value = 'something'

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

print (self.varname)
#will print 'something'
Run Code Online (Sandbox Code Playgroud)

但是,既然你应该通知一个对象接收新变量,我认为这只适用于类内部.

  • 正确,它只适用于课程内部. (12认同)
  • 要回答我自己的问题,是的,它可以在模块内部使用:/sf/ask/205342931/ (2认同)