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

新手上路,请多包涵

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

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

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

阅读 514
2 个回答

++ 不是运算符。它是两个 + 运营商。 + 运算符是 身份 运算符,它什么都不做。 (澄清: +- 一元运算符只对数字起作用,但我认为你不会期望字符串上的假设 ++ operator3 to work-18f82。 )

 ++count

解析为

+(+count)

这转化为

count

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

 count += 1

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

  • 更简单的解析。 Technically, parsing ++count is ambiguous, as it could be + , + , count (two unary + 运算符)就像 ++ , count (一个一元 ++ 运算符)一样简单。这不是一个明显的句法歧义,但它确实存在。
  • 更简单的语言。 ++ 只不过是 += 1 的同义词。这是一个简写发明,因为 C 编译器很愚蠢,不知道如何将 a += 1 优化为 inc 大多数计算机都有的指令。在优化编译器和字节码解释语言的今天,向一种语言添加运算符以允许程序员优化他们的代码通常是不受欢迎的,尤其是在像 Python 这样旨在保持一致和可读性的语言中。
  • 令人困惑的副作用。使用 ++ 运算符的语言中的一个常见新手错误是混淆了前后递增/递减运算符之间的差异(优先级和返回值),Python 喜欢消除语言“陷阱” -s。 C 中前置/后置自增优先级问题 非常棘手,而且非常容易搞砸。

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

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 程序员想要一个递增运算符,但该运算符看起来像是递增对象,而实际上它是重新分配对象。 Therefore the -= and += operators where added, to be shorter than the b = b + 1 , while being clearer and more flexible than b++ , so大多数人会增加:

 b += 1

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

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

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

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