python列表给变量赋值_Python:为列表或对象中的变量赋值[复制]

最初我误解了你的问题,我看到那种善意做对了.但我认为这个问题需要更详细地解释Python的工作原理.在Python中考虑变量的最佳方法是将变量名称视为附加箭头,将值视为这些箭头指向的对象.变量名称指向对象.所以当你这样做时:

a = 1

你真的在说“分数为1”.当你这样做:

b = a

你真的在说“b指的是同一个对象”.一般情况下,变量不能指向另一个变量名;它只能指向另一个变量指向的同一个对象.所以当你这样做时:

tom = [a, b, c]

您没有创建指向变量名称a,b和c的列表;您正在创建一个指向与a,b和c相同的对象的列表.如果你改变点的位置,它对tom [0]指向的位置没有影响.如果改变tom [0]指向的位置,它对点的位置没有影响.

现在,正如其他人所指出的,您可以通过编程方式更改变量名的值,使用exec(如建议的那样)(不推荐),或者通过更改globals()(也不推荐).但大部分时间,这都是不值得的.

如果你真的想这样做,我的建议就是简单地使用一个字典(如DzinX所建议的),或者,对于一个更接近问题精神的解决方案,并且仍然相当干净,你可以简单地使用一个可变对象.然后你可以使用getattr和setattr以编程方式改变该对象的属性,如下所示:

>>> class Foo():

... pass

...

>>> f = Foo()

>>> f.a = 1

>>> setattr(f, 'b', 2)

>>> getattr(f, 'a')

1

>>> f.b

2

通常,最好的解决方案是使用字典.但偶尔也会出现以上情况更好的情况.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值