In Java and C, the expression <condition> ? <expression True> : expression False
is widely used as an inline format. It could make the logic more clear than multiline format for guys who understand this convention. Actually, there is a logically equivalent expression in Python, which is <expression True> if <condition> else <expression False>
. However, I found a number of articles that have partial misconception, in which, they hold the argument that the expression <expression True> if <condition> else <expression False>
is logically equivalent to the expression <condition> and <expression True> or <expression False>
. The aim of this short post is to conduct a comparison between the two expressions and explain why the second expression is not logically equivalent to the first one.
Python logical expressions
This is the link to the Documentation of Boolean operations in Python3.
For convenience, I put the quotation here.
The expression x and y first evaluates x; if x is false, its value is returned; otherwise, y is evaluated and the resulting value is returned.
The expression x or y first evaluates x; if x is true, its value is returned; otherwise, y is evaluated and the resulting value is returned.
Experiments
In this case, it seems that the expression <condition> and <expression True> or <expression False>
can be used as a ternary operator. However, there is still an exception. Let’s look at the code block.


Obviously, the expression (2 > 1)
returns True
, the first line should output 0
if this expression is logically equivalent to the expression <expression True> if <condition> else <expression False>
. However, the output of the second line and the third line seem reasonable.
Explanation
In the first experiment (2 > 1) and 0 or 1
, after calculating the value of (2 > 1)
, the Python interpreter evaluates the first operand of the and
operator, which is True
and then returns the resulting value, which is False
. Since 0 and True
returns False
. After that, the interpreter evaluates the expression False or 1
, which returns 1
.
Conclusion
The logical expression <condition> and <expression True> or <expression False>
could be used as a tricky way as a ternary operator. However, the edge case must be taken into consideration. The recommend way of handling this scenario is to use the expression <expression True> if <condition> else <expression False>
, which is also officially recommended. However, the returning rules could also be used for other cases, for example or
operator can be use to assign a default value, an example is as follows:

