2012-02-24 10 views
35

これは私が何をしたいのストリップダウンバージョンです:文字列にその名前が与えられた変数の値を取得する方法は?簡単にするために

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" 

任意の方法?

答えて

55

それはグローバル変数だ場合は、行うことができます。

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

様々な「evalの」ソリューションに関する注意:あなたが評価している、特に文字列の場合は、evalのには注意する必要があります潜在的に信頼できないソースから来ます。そうしないと、悪意のある文字列が与えられた場合にディスクの内容全体またはそのような内容が削除されることがあります。

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

+18

'地元の人々()':別のモジュールの値を取得するには、getattrを使用することができます。 –

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

多田!

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

エドワードLoperさん答えは、変数が現在のモジュールにある場合にのみ機能します。地元の人々のために

import other 
print getattr(other, "name_of_variable") 

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

+0

そしてこのメ​​ソッドを使って、 'getattr()'を呼び出すモジュールと同じモジュール内の値を取得するには、 'import sys; sys.modules [__ name __] 'を使用して、現在のモジュールへの参照を取得します。 – Dirk

関連する問題