究竟什么是+;=你喜欢python吗?
我需要知道究竟什么是+;=你喜欢python吗?,python,operators,notation,shorthand,compound-assignment,Python,Operators,Notation,Shorthand,Compound Assignment,我需要知道+=在Python中做了什么。就这么简单。我还希望能够链接到Python中其他速记工具的定义。+=使用变量的值添加另一个值,并将新值分配给变量 >>> x = 3 >>> x += 2 >>> print x 5 -=,*=,/=对减法、乘法和除法的作用类似。它将右操作数添加到左操作数x+=2表示x=x+2 它还可以向列表中添加元素,请参见。+=向变量添加一个数字,在过程中更改变量本身(而+不会)。与此类似,以下内容也会修改变量:
+=
在Python中做了什么。就这么简单。我还希望能够链接到Python中其他速记工具的定义。+=
使用变量的值添加另一个值,并将新值分配给变量
>>> x = 3
>>> x += 2
>>> print x
5
-=
,*=
,/=
对减法、乘法和除法的作用类似。它将右操作数添加到左操作数<代码>x+=2表示x=x+2
它还可以向列表中添加元素,请参见。
+=
向变量添加一个数字,在过程中更改变量本身(而+
不会)。与此类似,以下内容也会修改变量:
,从变量中减去一个值,将变量设置为结果-=
,将变量与一个值相乘,使结果成为变量*=
,将变量除以值,使结果成为变量/=
,对变量执行模运算,然后将变量设置为其结果%=
可能还有其他人。我不是Python程序员。在Python中,+=是
\uuuIdd\uIdd\uIdd
特殊方法的糖衣,或者\uIdd\uIdd\uIdd>或者\uIdd\uIdd\uIdd\uIdd>如果不存在的话。类的\uuu\iadd\uu
方法可以做它想做的任何事情。list对象实现它,并使用它在iterable对象上迭代,该对象将每个元素附加到自身,方法与list的extend方法相同
下面是一个简单的自定义类,它实现了\uuuidd\uuuu
特殊方法。使用int初始化对象,然后可以使用+=运算符添加数字。我在中添加了一个print语句,表明它被调用。另外,\uuuuu iadd\uuuu
预计将返回一个对象,因此我返回了自身的加法加上在本例中有意义的其他数字
>>> 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
希望这有帮助。正如其他人所说,+=运算符是一种快捷方式。
例如:
var = 1;
var = var + 1;
#var = 2
也可以这样写:
var = 1;
var += 1;
#var = 2
因此,不必编写第一个示例,您可以只编写第二个示例,这将很好地工作。它不仅仅是一个语法糖分。试试这个:
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
+=
操作符调用\uuu iadd\uuuu()
列表方法,而+
操作符调用\uuu add\uuuu()
操作符。它们对列表执行不同的操作。x+=5
与Python中的x=x+5
并不完全相同
请注意:
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]
请参阅以供参考:记住,当您过去在旧计算器中进行求和时,例如2和3,每次您点击=
时,您会看到总数中增加了3,而+=
也做了类似的工作。例如:
>>> orange = 2
>>> orange += 3
>>> print(orange)
5
>>> orange +=3
>>> print(orange)
8
+=
只是写作的快捷方式
number = 4
number = number + 1
所以你会写
numbers = 4
numbers += 1
这两种方法都是正确的,但是示例二可以帮助您编写更少的代码从概念上讲,a+=b向a“添加”b,并将结果存储在a中。这种过于简单的描述将用多种语言描述+=运算符
然而,这种过于简单的描述提出了几个问题
“添加”到底是什么意思
我们所说的“将结果存储在数据库中”到底是什么意思?python变量不直接存储值,而是存储对对象的引用
在python中,这两个问题的答案取决于a的数据类型
那么,“添加”到底意味着什么呢
- 对于数字,它意味着数字相加
- 对于列表、元组、字符串等,它意味着连接
请注意,对于列表+=比+,列表上的+运算符需要另一个列表,但+=运算符将接受任何iterable
那么,“将价值存储在”是什么意思呢
如果对象是可变的,则鼓励(但不是必需)就地执行修改。所以a指向它以前做过的同一个对象,但该对象现在有不同的内容
如果对象是不可变的,那么它显然不能执行适当的修改。某些可变对象也可能没有就地“添加”操作的实现。在这种情况下,变量“a”将更新为指向包含加法运算结果的新对象
从技术上讲,这是通过首先查找\uuuuu IADD\uuuu
来实现的,如果没有实现,则尝试\uuuuuuu添加\uuuu
,最后是\uuuuu RADD\uu
在python中对不确定确切类型的变量使用+=时,尤其是在不确定类型是否可变的情况下,需要小心。例如,考虑下面的代码。
def dostuff(a):
b = a
a += (3,4)
print(repr(a)+' '+repr(b))
dostuff((1,2))
dostuff([1,2])
当我们使用元组调用dostuff时,元组作为+=操作的一部分被复制,因此b不受影响。然而,当我们用一个列表调用它时,列表会被修改,所以a和b都会受到影响
在Python3中,“bytes”和“bytearray”类型也观察到类似的行为
最后请注意,即使对象未被替换,也会发生重新指定。如果左侧只是一个变量,这并不重要,但当您有一个引用可变集合的不可变集合时,它可能会导致混乱的行为,例如:
a = ([1,2],[3,4])
a[0] += [5]
在这种情况下,[5]将成功添加到[0]引用的列表中,但之后当代码尝试重新分配[0]失败时,将引发异常。简短的回答是+=
可以翻译为“将+=右侧的任何内容添加到+=”左侧的变量中”
例如,如果你有a=10
,那么a+=5
将是:a=a+5
那么,“a”现在等于15 注意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 -= 1 + 3
x = x - (1 + 3)
x = (x - 1) + 3
x = 2
x += 3
print(x)