Python Ternary Operator
I’ve been using a tuple as a substitution of a ternary operator in Python. Even though it is not exactly a ternary operator and has some drawbacks, but it works fine in most cases.
w = (u, v)[x < y]
When x < y
is true, the whole expression of the tuple, (u, v)[x < y]
, will be evaluated as v
because true means 1 here. Likewise, false will cause the tuple expression to be evaluated as u
.
I had another trick to use with lambda functions.
lambda w: x < y and v or u
This might be a little less obvious to see what’s going on. When x < y
is false, the following part, and v
, will not be evaluated due to short-circuit evaluation, and it will jump to the next part, or u
. Thus, this whole expression is to be evaluated as u
. Similarly, when x < y
is true, and v
part has to be evaluated so it the whole expression will be evaluated as v
.
However, as acute readers might already noticed, this trick has a major drawback. When v
is a falsy value such as 0
, False
or None
, the whole expression will be evaluated as u
regardless of the result of x < y
. So, one should refrain from using this trick unless it is impossible for v
to be a falsy value.
Last Saturday, Cody told me that there is a ternary operator equivalent in Python.
w = v if x < y else u
Strictly speaking, it is not a ternary operator, rather an expression. But, in my opinion, it is more intuitive thus it makes it easier to maintain the code.