2012-02-24 76 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

'當地人()'當地人。 – 2012-02-24 20:49:19

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

tada!

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

愛德華·洛珀的只有當變量在當前模塊中時,答案纔有效。要獲得另一個模塊的值,你可以使用getattr

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 2016-03-17 12:38:23

相關問題