为什么 Python 将加法运算符的连续重复视为单次重复?
Why does Python treat consecutive repetitions of the addition operator as just a single repetition?
今天我注意到 Python 解释器将加法运算符的连续重复视为运算符的一次重复。例如:
>>> 1 ++ 2
3
发生此类事件时不简单地引发错误有什么用?我发现输入
的程序员更可信
>>> 1 -+-++ 2
只是他们的想法;这不太可能有意出现在代码中。
好像没什么用,写个类似的东西
>>> +-1
简单地returns-1
,说明该运算并没有使数为正数,而是简单地进行恒等运算。
这是数学。虽然对正常人来说没有意义,但 python +(+1) and -(-1) 是 +,+(-1) and -(+1) 是 -。
回到问题,不仅仅是 python 这样做。这是数学思维。就像告诉计算机一个叫string的变量等于29,听起来不对但计算机认为是正常的。
因为超载了。它是加法运算符(由 __add__
method), and also the unary positive operator (implemented by __pos__
). Compare that to -
, which is the subtraction operator (__sub__
) and unary negative operator (__neg__
实现)。
因此,例如,1 ++ 2
被解析为 1 + (+ 2)
,对于整数可以简化为 1 + 2
,但对于其他类型则不一定。参见 What's the purpose of the + (pos) unary operator in Python?
今天我注意到 Python 解释器将加法运算符的连续重复视为运算符的一次重复。例如:
>>> 1 ++ 2
3
发生此类事件时不简单地引发错误有什么用?我发现输入
的程序员更可信>>> 1 -+-++ 2
只是他们的想法;这不太可能有意出现在代码中。
好像没什么用,写个类似的东西
>>> +-1
简单地returns-1
,说明该运算并没有使数为正数,而是简单地进行恒等运算。
这是数学。虽然对正常人来说没有意义,但 python +(+1) and -(-1) 是 +,+(-1) and -(+1) 是 -。 回到问题,不仅仅是 python 这样做。这是数学思维。就像告诉计算机一个叫string的变量等于29,听起来不对但计算机认为是正常的。
因为超载了。它是加法运算符(由 __add__
method), and also the unary positive operator (implemented by __pos__
). Compare that to -
, which is the subtraction operator (__sub__
) and unary negative operator (__neg__
实现)。
因此,例如,1 ++ 2
被解析为 1 + (+ 2)
,对于整数可以简化为 1 + 2
,但对于其他类型则不一定。参见 What's the purpose of the + (pos) unary operator in Python?