Python 3.x 按变量名访问列表的元素
如何使用列表的名称访问列表元素 我想让用户编辑代码,以确定一个单一的变量输入到一个函数。例如:Python 3.x 按变量名访问列表的元素,python-3.x,Python 3.x,如何使用列表的名称访问列表元素 我想让用户编辑代码,以确定一个单一的变量输入到一个函数。例如: blah = [1,2] blah2 = 5 toBeChanged = "blah2" def foo(): print(blah) def changeVariable(): globals()[toBeChanged] += 1 for time in range(5): changeVariable() simulate 这适用于blah
blah = [1,2]
blah2 = 5
toBeChanged = "blah2"
def foo():
print(blah)
def changeVariable():
globals()[toBeChanged] += 1
for time in range(5):
changeVariable()
simulate
这适用于blah2,因为它是一个简单的变量,但不适用于blah[0],因为它是列表的一部分。我也尝试过像其他答案所建议的那样将变量放入字典,但我仍然无法通过简单的字符串更改列表元素
有没有一种方法是我所缺少的?谢谢 与其使用
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()
这还有一个额外的优点,即如果用户输入一个不存在的变量,则会选择默认值,并且不会覆盖任何对将来执行可能很重要的变量。这几乎就是我想要的,但是当运行时我收到一个类型错误,只能将list(而不是int)连接到list。当.get(toBeChanged,0)访问适当的元素时,我无法重新评估它,因为它是一个函数,有没有办法解决这个问题?谢谢您希望
[1,2]+=1
的结果是什么?这就是为什么我在寻找更改列表中单个元素的方法。例如,我想通过将blah[0]增加1来更改它,而不是整个列表。这个想法似乎不是个好主意。使用字典并测试对象类型是做你想做的事情的方法,但这似乎是个坏主意。你介意更详细地解释一下为什么这是个坏主意吗?谢谢因为在这种情况下,它不是自然的Python代码。如果您将一个元组、一个集合或一个dict传递给此函数,该怎么办?什么是集([1,2])+=1
?什么是(1,2)+=1
?您是说您想要一个支持列表的函数和任何其他支持+=
的函数吗?浮动一串您正在编写不灵活的代码,这可能是为了解决您对所看到的问题缺乏理解的问题。Python中的强类型是有原因的。