是否使用两个加法运算符在python中添加两个有效的整数?

时间:2017-06-11 12:21:33

标签: python python-2.7 python-3.x operators

我刚开始学习python。我只是想尝试打印功能。我最后写了下面的代码。

print(2 ++ 2)

我期望Python解释器抛出一个错误,因为我将两个加法运算符放在一起,而不在它们之间放置一个整数。相反,python解释器没有抛出任何错误并返回4作为输出。 我也尝试了下面的代码: -

print(4 -- 2)

输出为6。

有人能解释一下这些吗?

2 个答案:

答案 0 :(得分:5)

2 ++ 2 解释为:

2 ++ 2 == 2 + (+2)

因此,您需要在2+2之间执行添加,其中第二个+因此是一元加号。如果你写2 +++ 2

,也会发生同样的情况
2 +++ 2 == 2 + (+(+2))

对于4 -- 2案例,会发生类似情况:

4 -- 2 == 4 - (-2)

所以你从-2中减去4,导致6

不禁止使用两次,三次(或更多次)添加,但对于整数/浮点数只会导致更多混淆,所以最好不要这样做。

class定义自己的一元加号和一元减号运算符(例如Counter)。在这种情况下,++的行为可能与+不同。所以最好不要使用++ (如果你这样做,请在两个+ ses之间加一个空格,明确表示第二个+是不同的经营者)。

由于有一元加号和减号运算符,因此第一个+-之后的任何内容都被解释为一元。因此,2 ++--++- 2将导致0

2 ++--++- 2 == 2 + (+(-(-(+(+(-2))))))

答案 1 :(得分:4)

select num_bornes,x,y 
from point 
where geom in (select (st_dumppoints(geom)).geom 
               from polygon 
               where id_polygon=1)

2 ++ 2

2 + (+2)

4 -- 2

这只是运算符优先级,固定性和arity的问题:

4 - (-2)

注意,对于数字,一元前缀2 ==+-+-+ 2 #>>> True 被定义为标识函数,并且一元前缀+被定义为否定(这意味着双一元前缀-是标识功能);但Python支持运算符重载,因此不能保证所有对象都适用。