web-dev-qa-db-ja.com

文字列で名前を指定して変数の値を取得する方法は?

簡単にするために、これは私がやりたいことの簡略版です。

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"

これを行う方法はありますか?

60
dsavi

グローバル変数の場合、次のことができます。

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

さまざまな「評価」ソリューションに関する注意:評価する文字列が信頼できない可能性のあるソースから来ている場合は特に、評価に注意する必要があります。悪意のある文字列が与えられた場合。

(グローバルでない場合は、定義されている名前空間にアクセスする必要があります。それがない場合、アクセスできる方法はありません。)

95
Edward Loper

Edward Loperの答えは、変数が現在のモジュールにある場合にのみ機能します。別のモジュールで値を取得するには、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

多田!

7
maxm