我想要做以下事情:
a = 1
b = 2
c = 3
tom = [a,b,c]
for i in tom:
i = 6
期望结果是a = 6
实际结果是a = 1
我猜想没有不用执行特定代码的方法,对吗?
我想要做以下事情:
a = 1
b = 2
c = 3
tom = [a,b,c]
for i in tom:
i = 6
期望结果是a = 6
实际结果是a = 1
我猜想没有不用执行特定代码的方法,对吗?
起初我误解了你的问题,现在看来kindall回答得很对。但我认为这个问题需要更详细地解释Python的工作原理。在Python中,最好的思考变量的方式是将变量名看作带有箭头的东西,而值则是这些箭头指向的对象。变量名指向对象。因此,当你执行以下操作时:
a = 1
a
指向1
"。当你这样做时:b = a
b
指向与a
相同的对象"。在正常情况下,变量不能指向另一个变量名,它只能指向另一个变量所指向的相同对象。因此,当您这样做时:tom = [a, b, c]
getattr
和setattr
来编程地改变该对象的属性,就像这样:>>> class Foo():
... pass
...
>>> f = Foo()
>>> f.a = 1
>>> setattr(f, 'b', 2)
>>> getattr(f, 'a')
1
>>> f.b
2
一般情况下,最好的解决方案是使用字典。但偶尔会出现以上情况更好的情况。
tom = [a, b, c]
将值1、2和3放入列表中。一旦这些值在列表中,就无法知道指向它们的名称。假设它们是全局变量,您可以(但几乎肯定不应该)这样做:
tom = ["a", "b", "c"]
for n in tom:
globals()[n] = 1
在循环中尝试设置单个变量几乎总是错误的方法。这些值显然有共同点,否则您不会想要在循环中更改它们所有,因此,请将其存储在列表中(如果需要名称,则使用字典)并在那里访问和更改它们,而不是使用单个变量。
globals()
被定义了。 - Jakob Bowyera, b, c = map(lambda x: 6, [1, 2, 3])
或者
a, b, c = 1, 2, 3
a, b, c = map(lambda x: 6, [a, b, c])
如果你想根据它们的原始值为每个变量分配不同的值,那么这很容易推广。
values = {
'a': 1,
'b': 2,
'c': 3
}
for k in values:
values[k] = 6
print values['a']
# prints: 6
如果你只想修改部分数值,请使用:
for k in ['a', 'c']:
values[k] = 6
这是一个想法。
seniority = [range(1, 6)]
people = ["Richard", "Rob", "Steve", "Terry", "Micah"]
people = seniority
print people
输出:[[1, 2, 3, 4, 5,]]
tom
应该是[6, 6, 6]
吗?你知道tom = [a,b,c]
的结果是[1, 2, 3]
吗?对原始变量的引用丢失了,对列表中每个元素设置新值不会更新原始变量。 - Felix Kling