当出现这种情况时,它意味着什么:
self.something += ('somethin',)
What does "+=" mean and what does the comma mean?
a += b
表示 a = a + b
的简写形式,其中a
和b
可以是数字、字符串、元组或列表(但两个变量必须是相同的类型)。
在 ('x',)
中,逗号表示这是一个由单个元素'x'
组成的元组。如果省略逗号,则括号中只有一个 'x'
。
+=
是加法和赋值的结合体(有时称为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使用了逗号。
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
results=[]
for x in range(5):
results += '$'
print(results)
output : ['$', '$', '$', '$', '$']
这段代码与典型的+=运算符不同,如您所见,它生成了一个带有$
标志的列表。
它并不像我们认为的results = results+ '$'
那样会抛出错误。
实际发生的是+=运算符
在列表中的作用类似于.extend()
。