una - variables en python 2
Convertir una cadena a nombres de variables preexistentes (4)
Podrías hacer algo como lo que Geo recomienda, o ir con:
>>> wine = ''pinot_noir''
>>> vars()[wine] = ''yum''
>>> pinot_noir
''yum''
Nota: vars () y globals () son lo mismo, estoy acostumbrado a usar vars (). ¡Me sorprende que nadie me haya llamado así! De todos modos, es vars()
y locals()
que son lo mismo.
¿Cómo convierto una cadena al nombre de la variable en Python ?
Por ejemplo, si el programa contiene un objeto llamado self.post
que contiene una variable llamada, quiero hacer algo como:
somefunction("self.post.id") = |Value of self.post.id|
Además, existe la función globals () en Python que devuelve un diccionario con todas las variables definidas. También podrías usar algo como esto:
print globals()["myvar"]
Nota: no use eval en ningún caso donde obtenga el nombre para buscar desde la entrada ingresada por el usuario. Por ejemplo, si esto proviene de una página web, no hay nada que impida que alguien ingrese:
__import__("os").system("Some nasty command like rm -rf /*")
como el argumento Mejor es limitar a ubicaciones de búsqueda bien definidas, como un diccionario o una instancia utilizando getattr () . Por ejemplo, para encontrar el valor "publicar" en uno mismo, use:
varname = "post"
value = getattr(self, varname) # Gets self.post
De forma similar a establecerlo, use setattr ():
value = setattr(self, varname, new_value)
Para manejar nombres completamente calificados , como "post.id", puede usar algo como las funciones a continuación en lugar de getattr () / setattr () .
def getattr_qualified(obj, name):
for attr in name.split("."):
obj = getattr(obj, attr)
return obj
def setattr_qualified(obj, name, value):
parts = name.split(".")
for attr in parts[:-1]:
obj = getattr(obj, attr)
setattr(obj, parts[-1], value)
Como se hace referencia en pregunta Inplace sustitución de ConfigParser , estás buscando eval()
:
print eval(''self.post.id'') # Prints the value of self.post.id