2015-01-14 49 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)访问正确的元素,但我不能重新评估它,因为它的功能,有没有办法解决这个问题?谢谢! –