次の操作を評価すると
0 if True else 1 + 1 if False else 1
ただし、次のように括弧で書くと0に評価されます
( 0 if True else 1 ) + ( 0 if False else 1 )
最初のケースで何が起こっているのか、正しく 1 に評価されます。
次の操作を評価すると
0 if True else 1 + 1 if False else 1
ただし、次のように括弧で書くと0に評価されます
( 0 if True else 1 ) + ( 0 if False else 1 )
最初のケースで何が起こっているのか、正しく 1 に評価されます。
0 if True else 1 + 1 if False else 1
実際には:
(0) if (True) else ((1 + 1) if (False) else (1))
これは間違いなくあなたが望むものとは異なります:
((0) if (True) else (1)) + ((1) if (False) else (1))
as ternary operator
is read fromleft to right
であり+
、条件演算子よりも優先順位が低くなります。したがって、これら 2 つは同等です。
>>> 0 if True else 1 + 1 if False else 1
0
>>> 0 if True else ( (1 + 1) if False else 1)
0
三項演算子は「条件?真の場合の値:偽の場合の値」のように見えますが、Python ではサポートされていないようですが、if-else を使用して置き換えることができます。stype は「条件 if (b_1) else b_2」のようなものです。 b_1 が True の場合、値は条件であり、b_2 が True の場合、値は b_2 です。