2011-12-15 34 views
0

我想知道是否有可能通過字典處理變量。使用字典處理變量

例子:

global MyVar 
... 
MyVar = 0xFFFF 
d={"MyVar":MyVar} 
def ChangeVar (var_to_change, value) 
d[var_to_change] = value #I know this code assigns a new value to the key... 
... 
ChangeVar("MyVar",25) 
... 

我想用字典「中選擇」我將修改的變量。我總是可以使用一個數組,但我想知道是否有可能實現這一點。我不太瞭解Python中的指針。

在C會是這樣的(也許我寫了一個額外的或錯過了一個「*」):

int MyCVar = 0; 
int MyCVar2 = 0; 
int *MyD[] = {&MyCVar,&MyCVar2}; 
... 
*(MyD[index]) = some_value; 

我希望你明白我試圖解釋。

謝謝

喬納森

編輯: 謝謝大家對你的答案。我想要做的事情很難,因爲python處理的名字和對象完全不同。我所做的是這樣的:

class mytype(object): 
    def __init__(self,name=""): 
     self.__Name = name 
     .... 
     myDict[name] = self 

那麼我就可以使用名稱變量的訪問所有對象。這是我在第一個例子中試圖解釋的行爲。這就是我將如何訪問這些對象。

myDict["MyVar"].Value = 1 

謝謝大家,你的回答給了一些好主意。

+2

有什麼意義? – 2011-12-15 21:57:45

+3

沒有必要這樣做......`本地人()['Myvar'] = 25` – JBernardo 2011-12-15 22:01:06

回答

0

在Python中沒有糖來獲得雙指針語義。你需要傳遞一些引用的對象來改變你想要的值。例如,你的字典可以存儲一個訪問MyVar的函數,並且可以改變它。

MyVar = 5 
def ChangeMyVar(value): 
    global MyVar 
    MyVar = value 
d['MyVar'] = ChangeMyVar 

# later.. 
d['MyVar'](10) 

你會更好地設計這個來傳遞一個包裝你關心的實際值的對象。

class WrappedVar(object): 
    def __init__(self, val): 
     self.value = val 

MyVar = WrappedVar(5) 
d['MyVar'] = MyVar 

# later.. 
d['MyVar'].value = 10 
1

是的,我認爲@JBernardo有正確的想法。

您正試圖創建的所有變量名的字典,並使用該字典作爲一個查找表:

你的代碼凝視了一會兒,試圖&弄清楚到底是什麼你試圖做後改變價值觀?

http://docs.python.org/library/functions.html#globals

globals()["MyVar"] = 25 

將重新分配全球MyVar爲整數值25

1

在Python中的所有本地(和全局變量)已經放在一個字典,所以你可以做什麼是訪問這些字典。

您可以通過使用funcions中的locals()和globals()來實現。

即:

locals()['x'] = 'whatever' 

然而,不推薦使用:

此字典中的內容不應被修改;更改可能不會影響解釋器使用的局部變量的值。

doc

失敗時的簡單情況:

def test(): 
    a = 'a' 
    locals()['a'] = 'b' 
    print a 
test() 

全局(),OTOH是安全的進行修改。