为什么 Python,Ruby 等语言弃用了自增运算符

Python015

为什么 Python,Ruby 等语言弃用了自增运算符,第1张

在 Python 中,整数是一种不可变类型。在创建对象之后,其值就不能再被改变。

在 Java 或 C 等语言中, ++ 做的事情是让这个变量的值 +1,比如 a = 1a++,意思是将 a 原本的内存区域表示的值替换为原本的值 +1。而在 Python 中,一旦一个整数对象创建,其值就不能再被改变。所以,就无法实现 自增、自减 操作了。

---------------

更新一下吧,关于 i += 1 和 i = i + 1 究竟有什么不一样。在大多数情况下,你可以认为这两种写法是等价的。但是在实现上,还是有些许差异的,下面以整形变量 a 举例,两种写法生成的字节码如下:

i += 1:

6 LOAD_FAST0 (a)

9 LOAD_CONST 1 (1)

12 INPLACE_ADD

13 STORE_FAST 0 (a)

i = i + 1

6 LOAD_FAST0 (a)

9 LOAD_CONST 1 (1)

12 BINARY_ADD

13 STORE_FAST 0 (a)

可以看到,在底层调用上还是不同的。反应到 Python 语言层面的实现上,__add__ 对应着 + 号运算,而 __iadd__ 对应着 += 运算。

scala中的自增运算是一般它会有一个上标和下标的,下标表示开始 加 的起始数,上标表示终止数。

不过,第一种写法更好,因为它可以用来初始化一个val。而在第二种写法当中,s必须是var。

Java和C++有一个?:操作符用于同样目的。如下表达式:x >0 ? 1 : -1 // Java或C++。等同于Scala表达式 if (x >0) 1 else −1。不过,你不能在?:表达式中插入语句。Scala的if/else将在Java和C++中分开的两个语法结构if/else和?:结合在了一起。

scala技巧:

1、scala不要陷入C++一样的、不断膨胀的问题里,留下太多的选择,且没有清晰的最佳实践。这导致每个人都在选择不同的子集。要提供适应的指导。

2、scala记住,反对不良的设计功能与增加新功能同等重要——这很残酷。

3、scala考虑拆分语言为生产环境创建可行的标准。为学术世界节省成本是一个明智的选择。迎合企业的需要,获得更大的采用。

4、scala库的编写者应该看看Java API,确认是否应该有功能调用或结构化功能,为了更好的阅读。不要为了流动性在跳跃太大来与Ruby竞争。

for循环中有四个地方需要运行 for(语句1语句2语句4){ 语句块3 }

运行的时候是按照 语句1->语句2->循环里的语句块3->语句4 的顺序运行

所以当运行到 语句2 的判断条件的时候,跟 语句4 的自增没有任何关系

只有运行完语句2和语句块3 才会运行语句4的自增

就相当于

$i = 2

if($i <= 5){echo $i}

然后再 $i++或者 ++$i

这并不影响echo出去的值

所以语句4 前++ 和 后++ 都是一样的