With the Python (2.7) ternary expression x if cond else y what is the logical order when evaluating multiple expressions of these nested in order: e.g.
1 if A else 2 if B else 3
Drawing out the truth table for this is appears this is evaluated as 1 if A else (2 if B else 3) rather than (1 if A else 2) if B else 3:
A True False
B
True 1 2
False 1 3
Could someone please explain why this is executed in this order, and possibly suggest some material that gives an intuition about why this is used/preferred?
This doesn't seem obvious when considering the ordering using the inline for statement:
>>>[(i, j, k) for i in range(1) for j in range(2) for k in range(3)]
[(0, 0, 0), (0, 0, 1), (0, 0, 2), (0, 1, 0), (0, 1, 1), (0, 1, 2)]
解决方案
1 if A else 2 if B else 3 translates to this:
def myexpr(A, B):
if A:
return 1
else:
if B:
return 2
else:
return 3
Your ternary expression can be interpreted with parentheses as follows:
(
(1 if A) else (
(2 if B) else 3
)
)