【问题标题】:Preincrement operators in pythonpython中的预增量运算符
【发布时间】:2017-07-13 14:57:15
【问题描述】:

我来自 C/C++ 背景,我不断输入类似的东西

ix = -1
fred = objlist[++ix].value

这不起作用,因为 python 中没有预增量运算符。它只是给了我索引为-1的项目。没关系 - 我知道如何解决这个问题。

其实我最近在键盘上睡着的时候才发现它允许

------------------ix

它也允许

++++++++++++++++++ix

我不明白为什么 python 语法允许 ++ix 和 --ix。该语法不允许 ix++ 或 ix--。

【问题讨论】:

标签: python


【解决方案1】:

python 中的整数是不可变的,这就是为什么不允许后递增而前递增不起作用的原因。

由于整数是不可变的,唯一的修改方法是像这样重新分配它们:

x += 1

++ 不是运算符。它是两个+ 运算符。 + 运算符是恒等运算符,它什么都不做,这就是 ++x 不影响变量的原因。

澄清一下:

++x

解析为+(+x) 转换为x

在实践中,身份运算符+ 并不经常使用。这是 Python 文档中的定义:

一元 +(加号)运算符产生其数字参数不变。

这是我在 StackOverFlow 中找到的一个示例,它与小数舍入一起使用:

>>> from decimal import Decimal
>>> obj = Decimal('3.1415926535897932384626433832795028841971')
>>> +obj != obj  # The __pos__ function rounds back to normal precision
True
>>> obj
Decimal('3.1415926535897932384626433832795028841971')
>>> +obj
Decimal('3.141592653589793238462643383')

关于后自增:由于此运算符未在 Python 中定义,x++ 给出语法错误,因为解析器无法理解此表达式。

恕我直言,当程序员执行++ 时,Pyton 应该发出警告,因为它可能导致 C/C++/C# 开发人员的许多错误,他们的意图是对变量进行预递增。

【讨论】:

  • 也许我们只是需要一些闲置的东西——这是大多数人做实验的地方。可能类似于 C++ 程序员吧?你不能在 Python 中做到这一点
  • 整数的不变性与是否允许前后递增的语法糖无关。这取决于 Guido 的设计决策,另请参阅:stackoverflow.com/questions/3654830/…
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-09-25
  • 1970-01-01
  • 1970-01-01
  • 2016-07-21
  • 2012-05-06
  • 2017-06-30
  • 1970-01-01
相关资源
最近更新 更多