为什么Python中没有++和——运算符?


当前回答

我对python很陌生,但我怀疑原因是因为语言中可变对象和不可变对象之间的强调。现在,我知道x++可以很容易地解释为x = x+ 1,但它看起来像你在原地递增一个对象,而这个对象可能是不可变的。

这只是我的猜测/感觉/预感。

其他回答

操作符的++类是带有副作用的表达式。这在Python中通常是找不到的。

出于同样的原因,赋值在Python中不是表达式,从而防止使用here */}习语来使用常见的if (a = f(…)){/*。

最后,我怀疑这些操作符与python的引用语义不太一致。请记住,Python没有C/ c++中已知语义的变量(或指针)。

首先,Python只是间接地受到C的影响;它深受ABC的影响,ABC显然没有这些操作符,所以在Python中找不到它们也不足为奇。

其次,正如其他人所说,递增和递减已经由+=和-=支持。

第三,对++和——操作符集的完全支持通常包括对它们的前缀和后缀版本的支持。在C和c++中,这可能会导致各种“可爱的”构造,这些构造(对我来说)似乎违背了Python所信奉的简单和直接的精神。

例如,while C语句while(*t++ = *s++);对于一个有经验的程序员来说,它可能看起来简单而优雅,但对于一个初学者来说,它一点也不简单。加上前缀和后缀的增量和减量的混合,甚至许多专业人士也不得不停下来思考一下。

清晰!

Python非常强调清晰度,没有程序员能够正确地猜出——a的含义,除非他/她学过一种具有这种结构的语言。

Python还在很大程度上避免了引起错误的构造,而++操作符是众所周知的缺陷的丰富来源。 这两个原因足以让Python中不使用这些操作符。

决定Python使用缩进来标记块而不是 而不是句法手段,比如某种形式的开始/结束括号 或者强制性的结束标记很大程度上是基于同样的考虑。

为了说明问题,我们来看看关于引入条件操作符的讨论(在C: cond ?resultif: resultelse)在2005年加入Python。 至少阅读该讨论的第一条信息和决定信息(前面有几个关于同一主题的前奏)。

花絮: 其中经常提到的PEP是“Python增强提案”PEP 308。LC表示列表理解,GE表示生成器表达式(如果这些使您感到困惑,请不要担心,它们不是Python中少数复杂的地方)。

它就是这样设计的。自增和自减运算符只是x = x + 1的快捷方式。Python通常采用一种设计策略,减少执行操作的可选方法的数量。增强赋值是Python中最接近自增/自减操作符的东西,它们直到Python 2.0才被添加。

我认为这与对象的可变性和不变性的概念有关。2,3,4,5在python中是不可变的。参考下图。2在此python进程之前有固定的id。

x++本质上意味着像C一样的原地增量。在C中,x++执行原地增量。因此,x=3, x++会将内存中的3增加到4,不像python中的3仍然存在于内存中。

因此,在python中,你不需要在内存中重新创建一个值。这可能会导致性能优化。

这是一个基于直觉的答案。