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

Python011

为什么 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__ 对应着 += 运算。

1、第一步就是打开后盖。

2、第二步断开电源线,白色的插头,可以用手拔。

3、第三部,看到黑色的盒子,这个盒子打开,就是内存条插槽。但要注意盒子上面有个箭头,等装好内存条后,靠个箭头的位置把盒子装进去。

4、第四步,用螺丝刀小心翘开这个盒子,要用巧劲。撬开后就可以看到内存槽了,首批配的内存是三星的,刚好装上组成双通道。最后装完内存条,全部装回去就好了。

可以的。举个例子:

class Exp

attr :a

def initialize (a,b,c)

@a = a + b +c

end

def []= (index,*args)

self.a.index(index)

end

end

e = Exp.new('aaaa','bbbb','cccc')

puts e.a

puts e.[]=("b")

输出结果:

"aaaabbbbcccc"

4

不知道是不是你想要的答案,呵呵。