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

524 投票
20 回答
347867 浏览
提问于 2025-04-16 03:47

为什么Python里没有++--这两个运算符呢?

20 个回答

69

我一直认为这跟Python的“禅意”有关,特别是这句话:

应该有一种——最好只有一种——明显的方法来做这件事。

x++和x+=1的作用是完全一样的,所以没有必要同时存在这两种写法。

93

我写的这个原始回答其实是计算机领域的一个传说:被丹尼斯·里奇揭穿为“历史上不可能发生的事情”,这在2012年7月的《ACM通讯》编辑信中有提到,具体可以查看doi:10.1145/2209249.2209251


C语言中的自增和自减操作符是在C编译器还不够智能的时候发明的。那时候,作者希望能明确告诉编译器应该使用机器语言的操作符,这样可以节省一些处理时间,避免编译器做一些不必要的工作。

load memory
load 1
add
store memory

而不是

inc memory 

而且PDP-11计算机甚至支持“自动递增”和“自动递增延迟”指令,分别对应于*++p*p++。如果你非常好奇,可以查看手册的第5.3节。

现在,编译器已经足够智能,可以处理C语言语法中的高级优化技巧,所以这些操作符现在只是语法上的一种便利。

而Python没有这些技巧来向汇编器传达意图,因为它根本不使用汇编器。

519

这并不是说它没有道理;其实把“x++”定义为“x += 1,并返回x之前的值”是很合理的。

如果你想知道最初的原因,你得去翻阅一些老旧的Python邮件列表,或者问问当时的人(比如Guido),不过事后来看,这个决定也很容易理解:

在Python中,简单的加一和减一操作并不像其他语言那样常见。你不会经常写像for(int i = 0; i < 10; ++i)这样的代码;相反,你会写for i in range(0, 10)

因为这种操作不太常用,所以没必要为它单独设计一种特殊的语法;当你确实需要加一的时候,+=通常就足够了。

这并不是在讨论它是否合理,或者是否可以实现——它确实合理,也可以实现。关键在于这种好处是否值得加入到语言的核心语法中。记住,这涉及到四个操作符——后加、后减、前加、前减,每个操作符都需要有自己的类重载;这些都需要被定义和测试;这还会增加语言的操作码(意味着虚拟机引擎会变得更大、更慢);每个支持逻辑加一的类都需要实现这些操作(除了+=-=之外)。

这些操作与+=-=是重复的,所以最终会造成不必要的损失。

撰写回答