2012-07-19 17 views
58

Duplicar posibles:
How do I do variable variables in Python?Usando una variable de cadena como nombre de variable

tengo una variable con una cadena asignada a ella y quiero definir una nueva variable en función de que cuerda.

foo = "bar" 
foo = "something else" 

# What I actually want is: 

bar = "something else" 
+14

Probablemente NO quieras eso. ¿Por qué estás tratando de hacerlo? – JBernardo

+2

No, no es así. La razón por la que debe usar 'exec' es porque' locals() 'no admite modificaciones. 'locals()' no admite modificaciones porque haría la implementación más compleja y lenta, y ** nunca ** es una buena idea –

+1

Publicación similar: http://stackoverflow.com/questions/1373164/ how-do-i-do-variable-variables-in-python – Kartik

Respuesta

107

Puede utilizar exec para ello:

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

+1 porque respondió la pregunta (por mala que sea). – mgalgs

+0

Esta es la mejor respuesta, pero no funciona para mí. Tal vez se deba a mi alcance. Funciona en un archivo simple como el de su ejemplo, pero estoy en un método de una clase que intenta establecer variables locales, y no se están configurando. – sudo

91

que será mucho más feliz usando un diccionario en su lugar:

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

Parece que no aborda la pregunta. – dnsmkl

+2

Sí. Esto puede ser útil, pero no fue lo que el OP estaba preguntando. – sudo

+19

Me alegra ver que la respuesta todavía está aquí. Creo que podemos confiar en los lectores de Stack Overflow para que juzguen por sí mismos si una respuesta satisface sus necesidades. Esta respuesta no proporciona "variables variables", es verdad. Pero te garantizo que el 99% de las personas que los busque estarán más contentos de haber encontrado diccionarios. –

59

Puede utilizar setattr

name= 'varname' 
value= 'something' 

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

print self.varname 
#will print 'something' 

Pero , ya que deberías inf Como objeto para recibir la nueva variable, creo que esto solo funciona dentro de las clases.

+8

Correcto, solo funciona dentro de las clases. – sudo

Cuestiones relacionadas