5

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

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

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

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

[非交换运算]

4

3 回答 3

4

不,没有 的简写符号a = b + a。如果你需要为字符串做很多事情a = b + a,你最好建立一个像这样的列表:

lst = []

...

lst.append("a")
lst.append("bb")
lst.append("ccc")
lst.append("dddd")

...

lst.reverse()

return ''.join(lst)   # "ddddcccbba"
于 2012-11-12T17:22:46.150 回答
3

不,那里没有。


简写的由来

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

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

a = a + b我认为拥有或不拥有或没有特别的理由a = b + a。我认为编程中更经常需要这两个。原因是历史的。这与我们使用 QWERTY 键盘布局而不是其他键盘布局的原因相同。

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

可能的原因

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

可能的解决方案

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

如果没有传统,可读性应该会胜出,至少在 Python 中是这样。因此,一个人应该清楚地多写几个字符,而不是寻找速记。对于a = b + a.

笔记

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

于 2012-11-12T17:33:42.770 回答
0

我不知道任何语言都内置了这样的快捷方式,但有些语言允许你创建一个。

例如,在 Scala 中,您基本上可以定义自己的运算符。

于 2012-11-12T17:26:50.187 回答