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

时间:2012-11-12 17:16:42

标签: programming-languages compound-assignment compound-operator

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

此外,a = a - b可写为 - = b。

然而,a-b不等于b-a。因此,复合赋值运算符不适用于a = b - a

那么,是否有操作的复合赋值运算符 a = b op a (其中 op 可以是+, - ,*, /,%,和订单事项)?

[非交换操作]

3 个答案:

答案 0 :(得分: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"

答案 1 :(得分:3)

不,没有。


简写的起源

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

我会说人们习惯这样思考,所以这种模式在C语言中也以a += b速记出现。其他语言来自C。

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

更新See this,这是一个神话,因为C基于B语言,而不是来自汇编语言。起源不明确。

可能的原因

  • 每个运营商makes the language more complex。 Python支持运算符重载,因此有更多工作需要新的。
  • +=比较时很少使用。
  • 人们从汇编语言更多地用于+=种操作,而不是a = b + a,所以他们没有任何简写存在且没有请求它的事实。
  • 可读性问题。
  • 缺乏合适的语法。你会如何设计它?

可能的解决方案

最好的解决方案就是编写a = b + a,因为从第一眼开始它就清晰可读。 出于同样的原因(可读性)(更新:who knows?)Python不提供C和其他语言中已知的a++。您必须输入a += 1+=简写对于编程初学者来说也不是非常易读,但是人们仍然可以以某种方式至少猜测是什么。它是传统,懒惰和可读性之间的妥协。

如果没有传统,可读性应该赢,至少在Python中。因此,应该清楚地写一些字符,而不是寻找速记。 a = b + a就是这种情况。

注意

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

答案 2 :(得分:0)

我不知道任何语言内置的这种快捷方式,但有些语言可以让你创建一个。

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