Как получить значение переменной, учитывая ее имя в строке?

Для простоты это урезанная версия того, что я хочу сделать:

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

Я знаю, как это сделать в PHP:

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

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

Как это сделать?

Ответ 1

Если это глобальная переменная, вы можете сделать:

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

Заметка о различных решениях "eval": вы должны быть осторожны с eval, особенно если строка, которую вы оцениваете, происходит из потенциально ненадежного источника - в противном случае вы можете удалить все содержимое вашего диска или что-то вроде этого, если вам дана злонамеренная строка.

(Если он не является глобальным, вам потребуется доступ к любому пространству имен, в котором он определен. Если у вас этого нет, вы не сможете получить к нему доступ.)

Ответ 2

Ответ Эдварда Лопера работает только в том случае, если переменная находится в текущем модуле. Чтобы получить значение в другом модуле, вы можете использовать getattr:

import other
print getattr(other, "name_of_variable")

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

Ответ 3

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

Ответ 4

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

тада!