2012-02-24 13 views
35

Para simplificar esta es una versión simplificada de lo que quiero hacer:¿Cómo obtener el valor de una variable dado su nombre en una cadena?

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" 

Cualquier manera de hacer esto?

Respuesta

55

Si se trata de una variable global, entonces se puede hacer:

>>> a = 5 
>>> globals()['a'] 
5 

Una nota acerca de las diversas soluciones "eval": hay que tener cuidado con eval, sobre todo si la cadena que se está evaluando proviene de una fuente potencialmente no confiable; de ​​lo contrario, podría terminar borrando todo el contenido de su disco o algo así si recibe una cadena maliciosa.

(Si no es global, entonces tendrás acceso a cualquier espacio de nombres se define en. Si no tienes eso, no hay forma en que será capaz de acceder a él.)

+18

'locales()' para los locales. –

3
>>> x=5 
>>> print eval('x') 
5 

tada!

8
>>> string = "blah" 
>>> string 
'blah' 
>>> x = "string" 
>>> eval(x) 
'blah' 
20

Edward Loper de la respuesta solo funciona si la variable está en el módulo actual. Para obtener un valor en otro módulo, puede utilizar getattr:

import other 
print getattr(other, "name_of_variable") 

https://docs.python.org/2/library/functions.html#getattr

+0

Y si desea utilizar este método para obtener un valor en el mismo módulo al que está llamando 'getattr()', use 'import sys; sys.modules [__ name __] 'para obtener una referencia al módulo actual. – Dirk

Cuestiones relacionadas