¿Cómo obtener el valor de una variable dado su nombre en una cadena? [duplicar]

Resuelto dsavi asked hace 12 años • 4 respuestas

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?

dsavi avatar Feb 25 '12 03:02 dsavi
Aceptado

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).

Edward Loper avatar Feb 24 '2012 20:02 Edward Loper

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

eresonance avatar Oct 23 '2015 16:10 eresonance

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'
stark avatar Feb 24 '2012 20:02 stark