【发布时间】:2022-01-16 00:44:18
【问题描述】:
python 中的+= 运算符似乎在列表上意外运行。谁能告诉我这是怎么回事?
class foo:
bar = []
def __init__(self,x):
self.bar += [x]
class foo2:
bar = []
def __init__(self,x):
self.bar = self.bar + [x]
f = foo(1)
g = foo(2)
print f.bar
print g.bar
f.bar += [3]
print f.bar
print g.bar
f.bar = f.bar + [4]
print f.bar
print g.bar
f = foo2(1)
g = foo2(2)
print f.bar
print g.bar
输出
[1, 2]
[1, 2]
[1, 2, 3]
[1, 2, 3]
[1, 2, 3, 4]
[1, 2, 3]
[1]
[2]
foo += bar 似乎会影响该类的每个实例,而 foo = foo + bar 的行为似乎与我期望的行为方式相同。
+= 运算符称为“复合赋值运算符”。
【问题讨论】:
-
查看列表中“扩展”和“附加”之间的区别
-
我不认为这表明 Python 有什么问题。大多数语言甚至不允许您在数组上使用
+运算符。我认为在这种情况下添加+=非常有意义。 -
官方称它为“增强赋值”。
-
顺便说一句,使用
my_list += [x]是一种糟糕的风格。请不要这样做
标签: python augmented-assignment