2015-01-14 69 views
-1

如何使用列表名稱訪問列表元素?按變量名稱訪問列表元素

我想允許用戶編輯代碼來確定一個變量輸入到一個函數中。例如:

blah = [1,2] 
blah2 = 5 

toBeChanged = "blah2" 

def foo(): 
    print(blah) 

def changeVariable(): 
    globals()[toBeChanged] += 1 

for time in range(5): 
    changeVariable() 
    simulate 

這適用於blah2,因爲它是一個簡單的變量,但它不會胡說工作[0],因爲它是一個列表的一部分。我也試着將我的變量放到字典中,但我仍然無法通過簡單的字符串更改列表元素。

有沒有辦法做到這一點,我失蹤了?謝謝!

+1

你認爲'[1,2] + = 1'的結果是什麼? –

+0

這就是爲什麼我正在尋找更改列表的單個元素的方式。例如,我想通過增加1而不是整個列表來改變blah [0]。 –

+0

這整個概念似乎是一個壞主意。使用字典並測試對象類型是做你想做的事情的方式,但這似乎是一個壞主意。 –

回答

2

而不是使用globals()並直接改變它會好得多使用字典來存儲你希望用戶改變變量,然後操作這些:

my_variables = { 
    'blah': [1,2] 
    'blah2': 5 
} 

toBeChanged = "blah2" 

def foo(): 
    print(my_variables['blah']) 

def changeVariable(): 
    my_variables[toBeChanged] = my_variables.get(toBeChanged,0) + 1 

for time in range(5): 
    changeVariable() 

這具有附加的優點如果用戶輸入一個不存在的變量,則選擇一個默認值,並且不覆蓋任何對未來執行可能很重要的變量。

+0

這幾乎是我想要的,但是當運行時我收到一個類型錯誤,只能將列表(不是int)連接到列表。雖然.get(toBeChanged,0)訪問正確的元素,但我不能重新評估它,因爲它的功能,有沒有辦法解決這個問題?謝謝! –