为什么Python中没有++和——运算符?


当前回答

它就是这样设计的。自增和自减运算符只是x = x + 1的快捷方式。Python通常采用一种设计策略,减少执行操作的可选方法的数量。增强赋值是Python中最接近自增/自减操作符的东西,它们直到Python 2.0才被添加。

其他回答

我知道这是一个旧线程,但最常见的用例++ I没有涵盖,即手动索引集时,没有提供索引。这种情况就是python提供enumerate()的原因

示例:在任何给定的语言中,当你使用像foreach这样的构造来遍历一个集合时——为了示例的目的,我们甚至会说它是一个无序的集合,你需要一个唯一的索引来区分它们

i = 0
stuff = {'a': 'b', 'c': 'd', 'e': 'f'}
uniquestuff = {}
for key, val in stuff.items() :
  uniquestuff[key] = '{0}{1}'.format(val, i)
  i += 1

在这种情况下,python提供了一个枚举方法,例如。

for i, (key, val) in enumerate(stuff.items()) :

清晰!

Python非常强调清晰度,没有程序员能够正确地猜出——a的含义,除非他/她学过一种具有这种结构的语言。

Python还在很大程度上避免了引起错误的构造,而++操作符是众所周知的缺陷的丰富来源。 这两个原因足以让Python中不使用这些操作符。

决定Python使用缩进来标记块而不是 而不是句法手段,比如某种形式的开始/结束括号 或者强制性的结束标记很大程度上是基于同样的考虑。

为了说明问题,我们来看看关于引入条件操作符的讨论(在C: cond ?resultif: resultelse)在2005年加入Python。 至少阅读该讨论的第一条信息和决定信息(前面有几个关于同一主题的前奏)。

花絮: 其中经常提到的PEP是“Python增强提案”PEP 308。LC表示列表理解,GE表示生成器表达式(如果这些使您感到困惑,请不要担心,它们不是Python中少数复杂的地方)。

要完成那一页上已经很好的答案:

让我们假设我们决定这样做,前缀(++i)将打破一元的+和-操作符。

现在,用++或——作为前缀没有任何作用,因为它使一元加运算符两次(没有任何作用)或一元减运算符两次(两次:取消自身)

>>> i=12
>>> ++i
12
>>> --i
12

所以这可能会打破这个逻辑。

现在,如果需要它来进行列表推导或lambdas,从python 3.8开始,可以使用新的:=赋值操作符(PEP572)

预递增a并赋值给b:

>>> a = 1
>>> b = (a:=a+1)
>>> b
2
>>> a
2

后增量只需要通过减1来弥补过早的加法:

>>> a = 1
>>> b = (a:=a+1)-1
>>> b
1
>>> a
2

这可能是因为@GlennMaynard将这个问题与其他语言进行了比较,但在Python中,你用Python的方式做事。这不是一个“为什么”的问题。它在这里,你可以用x+=做同样的事情。在Python的禅宗中,它被赋予:“应该只有一种方法来解决一个问题。”多重选择在艺术上很好(表达自由),但在工程上很糟糕。

我相信这源于Python的信条“显式优于隐式”。