a = b <operator> a 是否有复合赋值运算符(其中 <operator> 不是可交换的)?

ash*_*shr 5 programming-languages compound-operator compound-assignment

在很多语言中 a = a + b 可以写成 a += b 在数值运算的情况下,a + b 与 b + a 相同,因此单个复合运算符就足够了。

此外, a = a - b 可以写成 a -=b 。

但是,ab 不等于 ba。因此,复合赋值运算符不适用于 a = b - a

那么,操作a = b op a(其中op可以是 +、-、*、/、% 和顺序很重要)是否有复合赋值运算符?

[非交换操作]

Hon*_*rek 3

不,那里没有。


简写的由来

我怀疑这个简写来自汇编语言,其中的ADD指令正是这样做的 - 接受两个操作数,进行加法并将其存储到第一个操作数。

我想说人们习惯于这样思考,所以这种模式也作为a += b简写出现在 C 语言中。其他语言从 C 中继承了这个。

我认为没有什么特别的理由去拥有或不拥有a = a + ba = b + a。我认为在编程中,这两者都不是更需要的。原因是历史性的。这与我们使用 QWERTY 键盘布局而不是其他键盘布局的原因相同。

更新看到这个,这是一个神话,因为 C 是基于 B 语言而不是来自汇编语言。起源尚不清楚。

可能的原因

  • 每个运算符都会使语言变得更加复杂。Python 支持运算符重载,因此需要做更多的工作才能拥有新的运算符。
  • 它很少用于与 进行比较+=
  • 人们更多地从汇编语言中使用+=某种操作而不是a = b + a,因此他们对不存在速记的事实感到满意,并且没有要求它。
  • 可读性问题。
  • 缺乏合适的语法。你会如何设计它?

可能的解决方案

最好的解决方案是只写a = b + a,因为乍一看它是清晰易读的。出于同样的原因(可读性)(更新:谁知道呢?)Python 不提供a++C 和其他语言已知的功能。你必须输入a += 1。对于编程初学者来说,速记+=也不是很容易理解,但人们仍然可以以某种方式至少猜出它的内容。它是传统、懒惰和可读性之间的妥协。

如果没有传统,可读性应该获胜,至少在 Python 中是这样。因此,人们应该清楚地多写几个字符,而不是寻找速记。就是这种情况a = b + a

笔记

如果您要连接更多字符串,则应该注意.join()性能问题。