What exactly does += do in python?
我需要知道+=在Python中的作用。就这么简单。我还希望链接到Python中其他短期工具的定义。
在python中,+=是用于
这是一个简单的自定义类,它实现了
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | >>> class Adder(object): def __init__(self, num=0): self.num = num def __iadd__(self, other): print 'in __iadd__', other self.num = self.num + other return self.num >>> a = Adder(2) >>> a += 3 in __iadd__ 3 >>> a 5 |
号
希望这有帮助。
1 2 3 4 | >>> x = 3 >>> x += 2 >>> print x 5 |
-= 从变量中减去一个值,将变量设置为结果*= 将变量和值相乘,使结果成为变量/= 将变量除以值,使结果成为变量%= 对变量执行取模,然后将变量设置为其结果。
可能还有其他的。我不是Python程序员。
请注意:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | In [1]: x = [2,3,4] In [2]: y = x In [3]: x += 7,8,9 In [4]: x Out[4]: [2, 3, 4, 7, 8, 9] In [5]: y Out[5]: [2, 3, 4, 7, 8, 9] In [6]: x += [44,55] In [7]: x Out[7]: [2, 3, 4, 7, 8, 9, 44, 55] In [8]: y Out[8]: [2, 3, 4, 7, 8, 9, 44, 55] In [9]: x = x + [33,22] In [10]: x Out[10]: [2, 3, 4, 7, 8, 9, 44, 55, 33, 22] In [11]: y Out[11]: [2, 3, 4, 7, 8, 9, 44, 55] |
。
请参阅:为什么+=在列表中的行为异常?
它将右操作数添加到左操作数。
它还可以向列表中添加元素——请参阅这个so线程。
这不仅仅是一种句法上的捷径。试试这个:
1 2 3 | x=[] # empty list x +="something" # iterates over the string and appends to list print(x) # ['s', 'o', 'm', 'e', 't', 'h', 'i', 'n', 'g'] |
对战
1 2 | x=[] # empty list x = x +"something" # TypeError: can only concatenate list (not"str") to list |
。
这说明,+=调用IADD列表方法,但+调用Add,后者对列表执行不同的操作。
从概念上讲,a+=b"将"b添加到a中,并将结果存储到a中。这种简单的描述将用多种语言描述+=运算符。
然而,这种简单的描述提出了几个问题。
在python中,这两个问题的答案取决于a的数据类型。
那么"添加"到底是什么意思呢?
- 对于数字,它意味着数字加法。
- 对于列表、元组、字符串等,它意味着连接。
注意,对于lists+=比+,列表上的+运算符需要另一个列表,但+=运算符将接受任何iterable。
那么"将值存储在"是什么意思呢?
如果对象是可变的,则鼓励(但不是必需)就地执行修改。所以a指向它以前做过的同一个对象,但是这个对象现在有不同的内容。
如果对象是不可变的,那么它显然不能就地执行修改。某些可变对象也可能没有就地"添加"操作的实现。在这种情况下,变量"a"将更新为指向包含加法运算结果的新对象。
从技术上讲,这是通过先查找
在python中对不确定确切类型的变量使用+=时,尤其是在不确定类型是否可变的情况下,需要小心。例如,考虑下面的代码。
1 2 3 4 5 6 7 | def dostuff(a): b = a a += (3,4) print(repr(a)+' '+repr(b)) dostuff((1,2)) dostuff([1,2]) |
当我们用一个元组调用dostuf时,该元组将被复制为+=操作的一部分,因此b不受影响。但是,当我们使用列表调用它时,列表会在适当的位置进行修改,因此A和B都会受到影响。
在python 3中,"bytes"和"bytearray"类型也观察到类似的行为。
最后要注意,即使没有替换对象,也会发生重新分配。如果左侧只是一个变量,这并不重要,但是当您有一个引用可变集合的不可变集合时,这可能会导致混淆行为,例如:
1 2 | a = ([1,2],[3,4]) a[0] += [5] |
号
在这种情况下,将成功地将[5]添加到由[0]引用的列表中,但随后,当代码尝试重新分配[0]但失败时,将引发异常。
1 | += |
。
只是写作的捷径
1 2 3 | numbers = 1 numbers = numbers + 1 print (numbers) ## 2 |
所以你应该写
1 2 3 | numbers = 1 numbers += 1 print (numbers) ## 2 |
。
这两种方法都是正确的,但是示例2可以帮助您编写更少的代码。
简短的答案是
例:如果你有
所以,"A"现在等于15。
记住,当你用旧计算器求和(例如2&3)时,每当你点击
1 2 3 4 5 6 7 | >>> orange = 2 >>> orange += 3 >>> print(orange) 5 >>> orange +=3 >>> print(orange) 8 |
正如其他人所说,+=操作符是一个快捷方式。一个例子:
1 2 3 | var = 1; var = var + 1; #var = 2 |
也可以这样写:
1 2 3 | var = 1; var += 1; #var = 2 |
。
因此,您可以不编写第一个示例,而只编写第二个示例,这会很好地工作。