web-dev-qa-db-fra.com

Comment obtenir la valeur d'une variable en fonction de son nom dans une chaîne?

Pour simplifier, voici une version allégée de ce que je veux faire:

def foo(a):
    # I want to print the value of the variable
    # the name of which is contained in a

Je sais comment faire cela en PHP:

function foo($a) {
    echo $$a;
}

global $string = "blah"; // might not need to be global but that's irrelevant
foo("string"); // prints "blah"

Une façon de faire ça?

60
dsavi

Si c'est une variable globale, alors vous pouvez faire:

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

Une note sur les différentes solutions "eval": vous devez être prudent avec eval, en particulier si la chaîne que vous évaluez provient d'une source potentiellement non fiable - sinon, vous pourriez finir par supprimer le contenu entier de votre disque ou quelque chose du genre. si on vous donne une chaîne illicite.

(Si ce n'est pas global, alors vous aurez besoin d'accéder à n'importe quel espace de nommage dans lequel il est défini. Sinon, vous ne pourrez pas y accéder.)

95
Edward Loper

La réponse d'Edward Loper ne fonctionne que si la variable est dans le module actuel. Pour obtenir une valeur dans un autre module, vous pouvez utiliser getattr:

import other
print getattr(other, "name_of_variable")

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

37
eresonance
>>> string = "blah"
>>> string
'blah'
>>> x = "string"
>>> eval(x)
'blah'
16
stark
>>> x=5
>>> print eval('x')
5

tada!

7
maxm