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

新手上路,请多包涵

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

原文由 Leonid 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 458
2 个回答

这不是因为它没有意义;而是因为它没有意义;将“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 引擎);每个支持逻辑增量的类都需要实现它们(在 +=-= )。

这对于 +=-= 都是多余的,所以它会成为净损失。

原文由 Glenn Maynard 发布,翻译遵循 CC BY-SA 2.5 许可协议

我写的这个原始答案是计算民间传说中的一个神话:丹尼斯里奇 在给 ACM 通讯 编辑的信中指出“历史上不可能”,2012 年 7 月 doi:10.11452209249.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 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题