Python中的+=是什么意思?
当它像这样的时候,是什么意思:
self.something += ('somethin',)
这里的“+=”是什么意思,逗号又是什么意思呢?
4 个回答
在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
+=
是把加法和赋值合在一起的操作(有时叫做 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 使用了逗号。
表达式 a += b
是 a = a + b
的简写,意思是把 b
加到 a
上。这里的 a
和 b
可以是数字、字符串、元组或者列表(但它们必须是同一种类型)。
在 ('x',)
中的逗号表示这是一个只有一个元素的元组,那个元素就是 'x'
。如果没有逗号,那就只是括号里的 'x'
,而不是元组。