2024-04-18 05:19:55 发布
网友
为什么Python中没有++和--运算符?
++
--
这并不是因为它没有意义;将“x++”定义为“x++=1,对x的前一个绑定求值”是完全有意义的。
如果你想知道最初的原因,你必须浏览旧的Python邮件列表,或者询问在场的人(例如Guido),但事后证明这一点很容易:
简单的增量和减量不像其他语言那样需要。你不会经常用Python编写for(int i = 0; i < 10; ++i)之类的东西;相反,你会做for i in range(0, 10)之类的事情。
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节。
*++p
*p++
由于编译器足够聪明,能够处理C语法中内置的高级优化技巧,所以它们现在只是一种语法上的便利。
Python没有向汇编程序传达意图的技巧,因为它不使用意图。
这并不是因为它没有意义;将“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禅有关:
x++和x+=1做了完全相同的事情,所以没有理由两者都有。
我写的这个最初的答案是一个关于计算的民间传说的神话:丹尼斯•里奇在写给2012年7月ACM通讯编辑的信中指出,这被揭穿为“历史上不可能的”
C增量/减量运算符是在C编译器不是很聪明的时候发明的,作者希望能够指定应该使用机器语言运算符的直接意图,该运算符可以为可能执行以下操作的编译器节省一些周期
而不是
PDP-11甚至支持分别对应于
*++p
和*p++
的“autoincrement”和“autoincrement deferred”指令。如果非常好奇,请参阅the manual的第5.3节。由于编译器足够聪明,能够处理C语法中内置的高级优化技巧,所以它们现在只是一种语法上的便利。
Python没有向汇编程序传达意图的技巧,因为它不使用意图。
相关问题 更多 >
编程相关推荐