Python 中的 ^=、-= 和 += 符号

Posted

技术标签:

【中文标题】Python 中的 ^=、-= 和 += 符号【英文标题】:^=, -= and += symbols in Python 【发布时间】:2016-10-17 03:49:37 【问题描述】:

我对 Python 非常有经验,但最近,当我查看 codility 示例测试的解决方案时,我遇到了运算符 -=+=^=,我无法弄清楚是什么他们是这样。也许有人能解释一下它们的使用背景吗?

【问题讨论】:

我很困惑,X += Y 本质上不会是 X = X + Y,除非它被您使用的库超载了? 啊是的,谢谢! 【参考方案1】:

与几乎所有现代语言一样,Python 拥有assignment operators 所以他们可以在每次你想在做一些算术或逻辑运算后为变量赋值时使用它们,两者(赋值和运算)都在一个语句中以紧凑的方式表达......

表from Tutorials Point:

Operator Description Example
= Assigns values from right side operands to left side operand c = a + b assigns value of a + b into c
+= Add AND It adds right operand to the left operand and assign the result to left operand c += a is equivalent to c = c + a
-= Subtract AND It subtracts right operand from the left operand and assign the result to left operand c -= a is equivalent to c = c - a
*= Multiply AND It multiplies right operand with the left operand and assign the result to left operand c *= a is equivalent to c = c * a
/= Divide AND It divides left operand with the right operand and assign the result to left operand c /= a is equivalent to c = c / a
%= Modulus AND It takes modulus using two operands and assign the result to left operand c %= a is equivalent to c = c % a
**= Exponent AND Performs exponential (power) calculation on operators and assign value to the left operand c **= a is equivalent to c = c ** a
//= Floor Division It performs floor division on operators and assign value to the left operand c //= a is equivalent to c = c // a

【讨论】:

这个表最左边一列所有的“AND”是什么意思?它是否应该以某种方式表示“和分配”?这很令人困惑,因为大写的可能指的是 AND 运算符。除了 Python 的 AND 运算符是小写的。嗯。 官方文档:augmented assignment statements 值得注意的是,此表并不完整。还有&=,等等。 @ΦXocę,看起来你截屏了from Tutorials Point 的表格而没有给予他们信任,这构成了抄袭,所以为了解决它,我添加了对源的引用。有关详细信息,请参阅 referencing help 和 this FAQ。另外,为了避免picture of text,我复制了原始文本并在Paste to Markdown 的帮助下将其格式化为table。【参考方案2】:

当您计算 X = X + Y 时,实际上是将 XY 的总和返回到一个新变量中,在您的示例中,该变量会覆盖之前的 X 值。当您使用X += 1 形式的赋值运算符时,值1 直接与X 的当前值相加,而不会在新变量中返回结果。看看下面的代码:

>>> V = np.arange(10)
>>> view = V[3:]        # view is just a subspace (reference) of the V array
>>> print(V);print(view)
[0 1 2 3 4 5 6 7 8 9]
[3 4 5 6 7 8 9] 
>>> view = view + 3     # add view to a constant in a new variable 
>>> print(V);print(view)
[0 1 2 3 4 5 6 7 8 9]
[ 6  7  8  9 10 11 12]
>>> view = V[3:]
>>> view += 3           # here you actually modify the value of V
>>> print(V);print(view)
[ 0  1  2  6  7  8  9 10 11 12]
[ 6  7  8  9 10 11 12]

您也可以查找numpy.ndarray.base 的文档来检查一个数组是否实际上是另一个数组的引用。

【讨论】:

以上是关于Python 中的 ^=、-= 和 += 符号的主要内容,如果未能解决你的问题,请参考以下文章

python中的字符编码和转换

使用 Python 和正则表达式计算文本中的标点符号

Python中的Unicode编码和UTF-8编码

如何从python中的文本文档中删除所有标点符号和其他符号?

python中的整数浮点数和布尔值

Python虚拟机中的一般表达式