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

2024-04-18 05:19:55 发布

您现在位置:Python中文网/ 问答频道 /正文

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


Tags: 运算符
3条回答

这并不是因为它没有意义;将“x++”定义为“x++=1,对x的前一个绑定求值”是完全有意义的。

如果你想知道最初的原因,你必须浏览旧的Python邮件列表,或者询问在场的人(例如Guido),但事后证明这一点很容易:

简单的增量和减量不像其他语言那样需要。你不会经常用Python编写for(int i = 0; i < 10; ++i)之类的东西;相反,你会做for i in range(0, 10)之类的事情。

因为几乎不需要经常使用它,所以没有太多理由赋予它自己的特殊语法;当您确实需要增加时,+=通常就可以了。

这不是一个决定它是否有意义,或者它是否可以做到——它做到了,而且它可以做到。这是一个是否值得在语言的核心语法中增加好处的问题。请记住,这是四个操作符——postinc、postdec、preinc、predec,每个操作符都需要有自己的类重载;它们都需要指定和测试;它将向语言添加操作码(意味着一个更大、更慢的VM引擎);支持逻辑增量的每个类都需要实现它们(位于+=-=之上)。

这与+=-=是多余的,因此它将成为净损失。

我一直以为这跟这句Python禅有关:

There should be one — and preferably only one — obvious way to do it.

x++和x+=1做了完全相同的事情,所以没有理由两者都有。

我写的这个最初的答案是一个关于计算的民间传说的神话:丹尼斯•里奇在写给2012年7月ACM通讯编辑的信中指出,这被揭穿为“历史上不可能的”


C增量/减量运算符是在C编译器不是很聪明的时候发明的,作者希望能够指定应该使用机器语言运算符的直接意图,该运算符可以为可能执行以下操作的编译器节省一些周期

load memory
load 1
add
store memory

而不是

inc memory 

PDP-11甚至支持分别对应于*++p*p++的“autoincrement”和“autoincrement deferred”指令。如果非常好奇,请参阅the manual的第5.3节。

由于编译器足够聪明,能够处理C语法中内置的高级优化技巧,所以它们现在只是一种语法上的便利。

Python没有向汇编程序传达意图的技巧,因为它不使用意图。

相关问题 更多 >