Как получить значение переменной, учитывая ее имя в строке?
Для простоты это урезанная версия того, что я хочу сделать:
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
тада!