为什么Python中没有++和--运算符?
#1楼
首先,Python仅受C间接影响。 它受ABC的影响很大, ABC 显然没有这些运算符 ,因此也没有在Python中找到它们也就不足为奇了。
其次,正如其他人所说的, +=和-=已经支持增量和减量。
第三,对++和--运算符集的完全支持通常包括同时支持它们的前缀和后缀版本。 在C和C ++中,这可能导致各种“可爱”的结构(在我看来)与Python所包含的简单性和直截了当的精神背道而驰。
例如,虽然C语句while(*t++ = *s++); 对于一个经验丰富的程序员来说,对于一个学习它的人来说,看起来似乎简单而优雅。 混合使用前缀和后缀的增量和减量,甚至许多专业人士也必须停下来思考一下。
#2楼
据我了解,所以您不会认为内存中的值已更改。 在c中,当执行x ++时,内存中x的值会更改。 但是在python中,所有数字都是不可变的,因此x指向的地址仍然具有x而不是x + 1。 当您编写x ++时,您会认为x发生了改变,实际上是x引用更改为内存中存储x + 1的位置,或者如果doe不存在,则重新创建该位置。
#3楼
这可能是因为@GlennMaynard正在将问题与其他语言进行比较,但是在Python中,您是以python方式进行操作的。 这不是一个“为什么”的问题。 它在那里,您可以使用x+=达到相同的效果。 在《 Python的禅宗》中 ,给出了:“只有一种解决问题的方法。” 多种选择在艺术上(表达自由)很棒,但在工程上却很糟糕。
#4楼
++类的运算符是具有副作用的表达式。 这是Python中通常找不到的东西。
出于相同的原因,赋值不是Python中的表达式,因此if (a = f(...)) { /* using a here */ }惯用法防止了常见的if (a = f(...)) { /* using a here */ } 。
最后,我怀疑操作符与Python的参考语义不是很一致。 请记住,Python没有具有C / C ++已知语义的变量(或指针)。
#5楼
我对python为什么没有++运算符的理解如下:当您在python中编写a=b=c=1您将获得三个变量(标签),它们指向同一对象(值为1)。 您可以使用id函数进行验证,该函数将返回对象内存地址:
In [19]: id(a)
Out[19]: 34019256
In [20]: id(b)
Out[20]: 34019256
In [21]: id(c)
Out[21]: 34019256
所有三个变量(标签)都指向同一对象。 现在递增变量之一,看看它如何影响内存地址:
In [22] a = a + 1
In [23]: id(a)
Out[23]: 34019232
In [24]: id(b)
Out[24]: 34019256
In [25]: id(c)
Out[25]: 34019256
您可以看到变量a现在指向另一个对象,即变量b和c 。 因为您已经使用a = a + 1所以显然很清楚。 换句话说,您完全分配了另一个对象来标记a 。 试想一下,你可以写a++它会建议你没有指派给变量a新的对象,但ratter递增旧的。 所有这些东西都是恕我直言,以尽量减少混乱。 为了更好地理解,请参见python变量如何工作: