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

2022-09-05 01:11:00

如何使用预递增/递减运算符 (, ),就像在C++中一样?++--

为什么运行但不更改变量的值?++count


答案 1

++不是操作员。它是两个运算符。运算符是标识运算符,它不执行任何操作。(澄清:和一元运算符只适用于数字,但我认为您不会期望假设运算符处理字符串。+++-++

++count

解析为

+(+count)

这意味着

count

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

count += 1

我怀疑和运算符被遗漏了,以保持一致性和简单性。我不知道Guido van Rossum为这个决定给出了确切的论据,但我可以想象一些论据:++--

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

答案 2

Python没有前增量和后增量运算符。

在Python中,整数是不可变的。那就是你不能改变它们。这是因为整数对象可以在多个名称下使用。试试这个:

>>> b = 5
>>> a = 5
>>> id(a)
162334512
>>> id(b)
162334512
>>> a is b
True

上面的 a 和 b 实际上是同一个对象。如果递增 a,则也会递增 b。这不是你想要的。因此,您必须重新分配。喜欢这个:

b = b + 1

许多使用python的C程序员想要一个增量运算符,但该运算符看起来像是递增了对象,而实际上它重新分配了它。因此,添加的 和 运算符,要比 短 ,同时比 更清晰、更灵活,所以大多数人会递增:-=+=b = b + 1b++

b += 1

这将重新分配给 。这不是一个递增运算符,因为它不递增 ,它会重新分配它。bb+1b

简而言之:Python在这里的行为不同,因为它不是C,也不是围绕机器代码的低级包装器,而是一种高级动态语言,其中增量没有意义,也不像C中那样必要,例如,每次有循环时都使用它们。