为什么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变量如何工作: