问题:+ =在python中到底是做什么的?
我需要知道+ =在python中做什么。就这么简单。我也希望链接到python中其他速记工具的定义。
回答 0
在Python中,+ =是__iadd__
特殊方法的糖衣,__add__
或者__radd__
如果__iadd__
不存在,则为+ 。__iadd__
类的方法可以执行任何所需的操作。列表对象实现了它,并使用它来迭代一个可迭代对象,该对象将每个元素附加到自身上,方法与列表的extend方法相同。
这是一个实现__iadd__
特殊方法的简单自定义类。您可以使用int初始化对象,然后可以使用+ =运算符添加数字。我在其中添加了一条打印语句,__iadd__
以表明它被调用了。另外,__iadd__
期望返回一个对象,因此我返回了自身的加号以及在这种情况下有意义的其他数字。
>>> 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
+=
将另一个值与变量的值相加,然后将新值分配给该变量。
>>> x = 3
>>> x += 2
>>> print x
5
-=
,*=
,/=
做减法,乘法和除法类似。
回答 2
x += 5
与x = x + 5
Python中所说的不完全相同。
注意这里:
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]
请参阅以供参考:为什么+ =在列表上表现异常?
回答 3
+=
在变量中添加一个数字,从而在过程中更改变量本身(而+
不会)。与此类似,以下内容也可以修改变量:
-=
,从变量中减去一个值,将变量设置为结果*=
,将变量和一个值相乘,结果就是变量/=
,将变量除以值,使结果成为变量%=
,对变量执行模数,然后将变量设置为其结果
可能还有其他。我不是Python程序员。
回答 4
它将右边的操作数添加到左边。 x += 2
手段x = x + 2
它还可以将元素添加到列表中-请参见此SO线程。
回答 5
这不仅仅是语法上的捷径。试试这个:
x=[] # empty list
x += "something" # iterates over the string and appends to list
print(x) # ['s', 'o', 'm', 'e', 't', 'h', 'i', 'n', 'g']
与
x=[] # empty list
x = x + "something" # TypeError: can only concatenate list (not "str") to list
这说明+ =调用iadd list方法,而+调用add,后者对列表执行不同的操作。
回答 6
通常,a + = b将b“加”到将结果存储到a中。这种简单的描述将以多种语言描述+ =运算符。
然而,简单的描述提出了两个问题。
- “添加”到底是什么意思?
- “将结果存储在a中”到底是什么意思?python变量不直接存储值,而是存储对对象的引用。
在python中,这两个问题的答案取决于a的数据类型。
那么“加”到底是什么意思?
- 对于数字,表示数字加法。
- 对于列表,元组,字符串等,意味着串联。
请注意,对于列表+ =比+更具灵活性,列表上的+运算符需要另一个列表,但是+ =运算符将接受任何可迭代的。
那么“将值存储在”中意味着什么呢?
如果对象是可变的,则鼓励(但不是必需)就地执行修改。因此,指向以前做过的同一个对象,但是该对象现在具有不同的内容。
如果对象是不可变的,则显然不能就地执行修改。一些可变对象也可能没有就地“添加”操作的实现。在这种情况下,变量“ a”将更新为指向包含加法运算结果的新对象。
从技术上讲,这是通过__IADD__
首先查找来实现的,如果未实现,则__ADD__
尝试并最后__RADD__
。
当在不确定确切类型的变量上使用python中的+ =时,需要特别小心,尤其是在不确定不确定类型是否可变的情况下。例如,考虑以下代码。
def dostuff(a):
b = a
a += (3,4)
print(repr(a)+' '+repr(b))
dostuff((1,2))
dostuff([1,2])
当我们使用一个元组调用dostuff时,该元组将被复制为+ =操作的一部分,因此b不受影响。但是,当我们使用列表调用它时,列表会被修改,因此a和b都会受到影响。
在python 3中,“ bytes”和“ bytearray”类型的行为类似。
最后请注意,即使未替换对象,也会发生重新分配。如果左侧只是一个变量,这无关紧要,但是当您有一个引用可变集合的不可变集合时,它可能引起混乱的行为,例如:
a = ([1,2],[3,4])
a[0] += [5]
在这种情况下,[5]将成功添加到a [0]引用的列表中,但是此后,当代码尝试重新分配a [0]失败时,将引发异常。
回答 7
简短的答案+=
可以翻译为“将+ =右侧的任何内容添加到+ =“左侧的变量中。
例如 如果是a = 10
这样的a += 5
话: a = a + 5
因此,“ a”现在等于15。
回答 8
注意x += y
与x = x + y
某些情况下包含附加运算符不同,这是因为运算符优先级加上总是首先评估右侧的事实,例如
>>> x = 2
>>> x += 2 and 1
>>> x
3
>>> x = 2
>>> x = x + 2 and 1
>>> x
1
注意第一种情况扩展为:
>>> x = 2
>>> x = x + (2 and 1)
>>> x
3
您更有可能在“现实世界”中与其他运营商(例如,
x *= 2 + 1
== x = x * (2 + 1)
!=x = x * 2 + 1
回答 9
+=
只是写作的捷径
number = 4
number = number + 1
所以你会写
numbers = 4
numbers += 1
两种方法都是正确的,但是示例二可以帮助您减少编写代码
回答 10
就像其他人所说的,+ =运算符是快捷方式。一个例子:
var = 1;
var = var + 1;
#var = 2
也可以这样写:
var = 1;
var += 1;
#var = 2
因此,无需编写第一个示例,您只需编写第二个示例,就可以了。
回答 11
请记住,当您过去使用旧计算器求和时(例如2和3),每当您点击=
总和时,您就会看到3被加到总数中,+=
执行类似的工作。例:
>>> orange = 2
>>> orange += 3
>>> print(orange)
5
>>> orange +=3
>>> print(orange)
8
回答 12
我看到很多使用+ =并带有多个整数的答案。
一个例子:
x -= 1 + 3
这类似于:
x = x - (1 + 3)
并不是:
x = (x - 1) + 3
回答 13
根据文档
x += y
等价于x = operator.iadd(x, y)
。另一种表达方式是说它z = operator.iadd(x, y)
等同于复合语句z = x; z += y
。
因此x += 3
与相同x = x + 3
。
x = 2
x += 3
print(x)
将输出5。
请注意,还有