Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Comparison operators' priority in Python vs C/C++

In C/C++, comparison operators such as < > have higher priority than == does. This code will evaluate to true or 1:

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

But in Python, it seems wrong:

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

In Python, does every comparison operator have the same priority?

like image 361
Alcott Avatar asked Jan 10 '12 11:01

Alcott


People also ask

Which operator has highest priority in Python?

Parentheses have the highest precedence and can be used to force an expression to evaluate in the order you want.

What is the priority of operators in Python?

Almost all the operators have left-to-right associativity. For example, multiplication and floor division have the same precedence. Hence, if both of them are present in an expression, the left one is evaluated first. Note: Exponent operator ** has right-to-left associativity in Python.

Which operator is evaluated first in Python?

In Python, the left operand is always evaluated before the right operand. That also applies to function arguments. Python uses short circuiting when evaluating expressions involving the and or or operators.

Which precedence order is correct in Python?

Answer: The correct order of precedence is given by PEMDAS which means Parenthesis (), Exponential **, Multiplication *, Division /, Addition +, Subtraction -.


2 Answers

In Python, not only do comparison operators gave the same priority, they are treated specially (they chain rather than group). From the documentation:

Formally, if a, b, c, ..., y, z are expressions and op1, op2, ..., opN are comparison operators, then a op1 b op2 c ... y opN z is equivalent to a op1 b and b op2 c and ... and y opN z, except that each expression is evaluated at most once.

In your case, the expression

3<4 == 2<3

is equivalent to

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

which is False due to the second clause.

like image 171
avakar Avatar answered Oct 14 '22 14:10

avakar


Short answer: yeah, all the comparisons have the same precedence

Long answer: you may want to have a look on the documentation: Precedence on Python

like image 30
Ricardo Cárdenes Avatar answered Oct 14 '22 12:10

Ricardo Cárdenes