为什么 Python 中没有 ++
和 --
运算符?
原文由 Leonid 发布,翻译遵循 CC BY-SA 4.0 许可协议
为什么 Python 中没有 ++
和 --
运算符?
原文由 Leonid 发布,翻译遵循 CC BY-SA 4.0 许可协议
我写的这个原始答案是计算民间传说中的一个神话:丹尼斯里奇 在给 ACM 通讯 编辑的信中指出“历史上不可能”,2012 年 7 月 doi:10.1145⁄2209249.2209251
C 递增/递减运算符是在 C 编译器不是很聪明的时候发明的,作者希望能够指定应该使用机器语言运算符的直接意图,这为编译器节省了一些周期可能会做一个
load memory
load 1
add
store memory
代替
inc memory
PDP-11 甚至支持分别对应于 *++p
和 *p++
的“自动增量”和“自动增量延迟”指令。如果非常好奇,请参阅 手册 的第 5.3 节。
由于编译器足够聪明,可以处理 C 语法中内置的高级优化技巧,它们现在只是一种语法上的便利。
Python 没有向汇编程序传达意图的技巧,因为它不使用这种技巧。
原文由 msw 发布,翻译遵循 CC BY-SA 3.0 许可协议
2 回答5.2k 阅读✓ 已解决
2 回答1.1k 阅读✓ 已解决
4 回答1.4k 阅读✓ 已解决
3 回答1.3k 阅读✓ 已解决
3 回答1.2k 阅读✓ 已解决
2 回答862 阅读✓ 已解决
1 回答1.7k 阅读✓ 已解决
这不是因为它没有意义;而是因为它没有意义;将“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 引擎);每个支持逻辑增量的类都需要实现它们(在
+=
和-=
)。这对于
+=
和-=
都是多余的,所以它会成为净损失。