小编典典

Python中递增和递减运算符的行为

all

我注意到可以在变量(如++count)上应用预递增/递减运算符。它可以编译,但实际上并没有改变变量的值!

Python 中预递增/递减运算符 (++/–) 的行为是什么?

为什么 Python 会偏离 C/C++ 中看到的这些运算符的行为?


阅读 137

收藏
2022-02-28

共1个答案

小编典典

++不是运算符。它是两个+运算符。+运算符是 身份
运算符,它什么也不做。(澄清:+-一元运算符仅适用于数字,但我认为您不会期望假设++运算符适用于字符串。)

++count

解析为

+(+count)

这转化为

count

您必须使用稍长的+=运算符来执行您想要执行的操作:

count += 1

我怀疑++and--运算符是为了一致性和简单性而被排除在外的。我不知道 Guido van Rossum
给出的决定的确切论点,但我可以想象一些论点:

  • 解析更简单。从技术上讲,解析++count是模棱两可的,因为它可能是+, +, count(两个一元运算符),就像它可能是, (一个一元运算+符)一样容易。这不是一个重要的句法歧义,但它确实存在。++``count``++
  • 更简单的语言。++无非是 的同义词+= 1。它是一种速记发明,因为 C 编译器很愚蠢,不知道如何优化a += 1inc大多数计算机所拥有的指令。在优化编译器和字节码解释语言的今天,向一种语言添加运算符以允许程序员优化他们的代码通常是不受欢迎的,尤其是在像 Python 这样的设计为一致和可读的语言中。
  • 令人困惑的副作用。使用运算符的语言中一个常见的新手错误++是混淆了前后递增/递减运算符之间的差异(优先级和返回值),而 Python 喜欢消除语言“陷阱”。C 中的前/后增量优先级问题非常棘手,而且非常容易搞砸。
2022-02-28