4

Python 不支持 C 风格的++a增量,但令我惊讶的是,它也没有抱怨导致我暂时对为什么我的循环不工作感到困惑。

尝试一些事情(首先用 初始化a=0)我发现a++a--产生语法错误,但++a没有。虽然--a在 Python 3.3 中会产生语法错误,但在 Python 2.7 中不会。

这是怎么回事?为什么不++a报错?为什么--a2.7 不报错,但 3.3 报错?

4

3 回答 3

17

看看这个控制台会话:

>>> a = 10
>>> ++a
10
>>> +a
10
>>> -a
-10
>>> --a
10

基本上++a == +(+(a)), 和--a == -(-(a))。这个是为了把这个概念打回家(而且是为了好玩):

>>> ++++++++++a
10

以下代码示例除了向您展示 Python 有多么有趣之外,没有其他目的:

>>> +-+-+a
10

有了这样的东西,你可以制作运行.

如果你想增加你这样做a += 1:并且--a适用于Python 2 和 3

于 2013-10-24T11:25:34.483 回答
12

简短的回答:它调用该__pos__方法两次。例如考虑:

>>> class A(object):
...     def __init__(self, x):
...         self.x = x
...     def __pos__(self):
...         return A(2 * self.x)
...     def __repr__(self):
...         return 'A(%s)' % self.x
... 
>>> a = A(1)
>>> a
A(1)
>>> +a
A(2)
>>> ++a
A(4)
>>> +++a
A(8)

对于整数,作为+x返回x,它基本上什么都不做。

于 2013-10-24T11:27:37.113 回答
0

不,在 Python(2.x 和 3.x)中, ++var如果变量的值实际上是一个数字, using 将返回与以前相同的变量值。并且使用var++会引发异常。

此外,在 Python 中,++var操作的行为与其他一些语言(如 PHP、JS、C++)不同,其中++var实际上意味着您要将变量的值增加 1。但在 Python 中,要增加,您必须使用类似var = var + 1或者var += 1它不会工作。

于 2013-10-24T11:35:20.223 回答