Python中的+=是什么意思?

6 投票
4 回答
63994 浏览
提问于 2025-04-17 04:04

当它像这样的时候,是什么意思:

self.something += ('somethin',)

这里的“+=”是什么意思,逗号又是什么意思呢?

4 个回答

7

在Python中,有一个运算符可以用来给名字赋值,那就是 =

这个语言还支持很多其他的运算符,比如 +-**,这些运算符可以用在你自己定义的对象的特殊方法里。

虽然 + 是用来加法的数学符号,但你可以自定义它,让它做你想要的任何事情。

有时候,你可能想进行某个操作,并且用同一个名字来存储结果。对于这种情况,Python 提供了就地运算符,它们就是你熟悉的普通运算符加上 = 符号。

对于不可变对象(比如数字、字符串、元组等),你不能就地修改它们,因为……它们是不可变的。所以,就地方法和普通方法加上赋值的效果是一样的。

而对于可变对象,区别就明显多了:

就地加法:

>>> a = []
>>> b = a
>>> b += [1,2]
>>> a
[1, 2]

加法并赋值:

>>> a = []
>>> b = a
>>> b = b + [1,2]
>>> a
[]

看到了吗?在列表的就地加法中,原来的对象本身被改变了,而在后者的情况下,创建了一个新的对象。


至于你的另一个问题,逗号是元组的分隔符。

a = (1)   # Just number 1 inside parenthesis
a = (1,)  # A tuple with one element
8

+= 是把加法和赋值合在一起的操作(有时叫做 iadd 或者就地加)。它的意思和 a = a + x 是一样的。

a = 4
a += 5  # add 5 to a, and assign the result into a
b = 4
b = b + 5   # this does the same thing as +=
print a  # prints out 9
print b  # prints out 9

你也可以用这种方式做其他操作,比如 -=(减法赋值)、*=(乘法赋值)、/=(除法赋值)、&=(按位与)、|=(按位或)、^=(按位异或)、%=(取模)、**=(幂运算)。


('something',) 是一个元组。而 ('something')(没有逗号)则是用括号来分组,类似于 ('some' + 'thing') 或者 (a + b)。为了区分只有一个元素的元组和分组,Python 使用了逗号。

12

表达式 a += ba = a + b 的简写,意思是把 b 加到 a 上。这里的 ab 可以是数字、字符串、元组或者列表(但它们必须是同一种类型)。

('x',) 中的逗号表示这是一个只有一个元素的元组,那个元素就是 'x'。如果没有逗号,那就只是括号里的 'x',而不是元组。

撰写回答