Вопрос-Ответ

How to get the value of a variable given its name in a string? [duplicate]

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

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

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's 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/3/library/functions.html#getattr

Ответ 3

Предполагая, что вы знаете, что строка безопасна для вычисления, тогда eval выдаст значение переменной в текущем контексте.

>>> string = "blah"
>>> string
'blah'
>>> x = "string"
>>> eval(x)
'blah'
Ответ 4
>>> x=5
>>> print eval('x')
5

tada!

python string