2012-01-10 104 views
4

在C/C++中,比较运算符(如< >)的优先级高于==,对吗?比较运算符在Python和C/C++中的优先级

所以在C/C++,代码将评估为true1

if(3<4 == 2<3) { //3<4 == 2<3 will evaluate to true, right? 
    ... 
} 

但是在Python中,它似乎是错误的:

3<4 == 2<3 #this will evaluate to False in Python. 

问题

在Python每个比较运算符都有相同的优先级吗?

回答

5

在Python,不仅做对比运营商作出了同样的优先,他们被特别对待(他们连锁而不是组)。从documentation

在形式上,如果a, b, c, ..., y, z是表达式和​​op1, op2, ..., opN是比较操作符,然后a op1 b op2 c ... y opN z是相当于一个op1 b and b op2 c and ... y opN z,除了每个表达式的值最多一次。

在你的情况中,表达

3<4 == 2<3 

相当于

3 < 4 and 4 == 2 and 2 < 3 

这是False由于第二条款。

+0

谢谢你,这很清楚,我会检查Python文档。 – Alcott 2012-01-10 12:30:52

3

简短的回答:是的,所有的比较具有相同的优先级

龙答:你可能想拥有的文档的样子:Precedence on Python

+1

因此,做明智的事情:在表达式 – 2012-01-10 12:01:08

+1

周围放置括号,因此在Python和C/C++中将比较表达式放在括号内是很好的习惯,对吧? – Alcott 2012-01-10 12:05:00

+1

@Alcott:一个经验法则是,如果您完全想用间距来表示优先级,就像您在上面的C++代码中所做的那样,那么您应该放置括号。否则,您的间距可能会“撒谎”。 – 2012-01-10 12:28:06