为什么Python中没有++和--运算符?
为什么Python里没有++
和--
这两个运算符呢?
20 个回答
我一直认为这跟Python的“禅意”有关,特别是这句话:
应该有一种——最好只有一种——明显的方法来做这件事。
x++和x+=1的作用是完全一样的,所以没有必要同时存在这两种写法。
我写的这个原始回答其实是计算机领域的一个传说:被丹尼斯·里奇揭穿为“历史上不可能发生的事情”,这在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没有这些技巧来向汇编器传达意图,因为它根本不使用汇编器。
这并不是说它没有道理;其实把“x++”定义为“x += 1,并返回x之前的值”是很合理的。
如果你想知道最初的原因,你得去翻阅一些老旧的Python邮件列表,或者问问当时的人(比如Guido),不过事后来看,这个决定也很容易理解:
在Python中,简单的加一和减一操作并不像其他语言那样常见。你不会经常写像for(int i = 0; i < 10; ++i)
这样的代码;相反,你会写for i in range(0, 10)
。
因为这种操作不太常用,所以没必要为它单独设计一种特殊的语法;当你确实需要加一的时候,+=
通常就足够了。
这并不是在讨论它是否合理,或者是否可以实现——它确实合理,也可以实现。关键在于这种好处是否值得加入到语言的核心语法中。记住,这涉及到四个操作符——后加、后减、前加、前减,每个操作符都需要有自己的类重载;这些都需要被定义和测试;这还会增加语言的操作码(意味着虚拟机引擎会变得更大、更慢);每个支持逻辑加一的类都需要实现这些操作(除了+=
和-=
之外)。
这些操作与+=
和-=
是重复的,所以最终会造成不必要的损失。