¿Cómo obtener el valor de una variable dado su nombre en una cadena? [duplicar]
Para simplificar, esta es una versión simplificada de lo que quiero hacer:
def foo(a):
# I want to print the value of the variable
# the name of which is contained in a
Sé cómo hacer esto en PHP:
function foo($a) {
echo $$a;
}
global $string = "blah"; // might not need to be global but that's irrelevant
foo("string"); // prints "blah"
Alguna forma de hacer esto?
Si es una variable global, entonces puedes hacer:
>>> a = 5
>>> globals()['a']
5
Una nota sobre las diversas soluciones de "eval": debes tener cuidado con eval, especialmente si la cadena que estás evaluando proviene de una fuente potencialmente no confiable; de lo contrario, podrías terminar eliminando todo el contenido de tu disco o algo así. si te dan una cadena maliciosa.
(Si no es global, necesitará acceso al espacio de nombres en el que esté definido. Si no lo tiene, no podrá acceder a él).
La respuesta de Edward Loper solo funciona si la variable está en el módulo actual. Para obtener un valor en otro módulo, puede usar getattr
:
import other
print getattr(other, "name_of_variable")
https://docs.python.org/3/library/functions.html#getattr
Suponiendo que sabe que es seguro evaluar la cadena, eval proporcionará el valor de la variable en el contexto actual.
>>> string = "blah"
>>> string
'blah'
>>> x = "string"
>>> eval(x)
'blah'