三項演算子は単純なif-else文を1行でまとめてくれて、読みやすくしてくれます。
if-else文
例えば、vが10より大きいときの値でfoo、それ以外はbarと表示させたいとき、if-else文で書くと4行で書きます。
if-else文で書くと4行
In [22]: for v in range(-5, 15):
...: if v > 10:
...: p = 'foo'
...: else:
...: p = 'bar'
...: print(v, p)
...:
-5 bar
-4 bar
-3 bar
-2 bar
-1 bar
0 bar
1 bar
2 bar
3 bar
4 bar
5 bar
6 bar
7 bar
8 bar
9 bar
10 bar
11 foo
12 foo
13 foo
14 foo
三項演算子
三項演算子の文法は
(変数) = (条件がTrueのときの値) if (条件) else (条件がFalseのときの値)
三項演算子なら1行で書けます。
三項演算子で書くと1行
In [26]: for v in range(-5, 15):
...: p = 'foo' if v > 10 else 'bar'
...: print(v, p)
-5 bar
-4 bar
-3 bar
-2 bar
-1 bar
0 bar
1 bar
2 bar
3 bar
4 bar
5 bar
6 bar
7 bar
8 bar
9 bar
10 bar
11 foo
12 foo
13 foo
14 foo
ここではfor-print文の間のif-else文を三項演算子でまとめています。
ネスト
if-elif-else文
一つ条件を加えて0未満であれば'foobar'と出力するとき、elif
を加えます。
これで「10より大きければ'foo'、0未満であれば'foobar'、それ以外は'bar'」を出力します。
if-else文条件が2つ以上
In [36]: for v in range(-5, 15, 1):
...: if v > 10:
...: p = 'foo'
...: elif v < 0:
...: p = 'foobar'
...: else:
...: p = 'bar'
...: print(v, p)
...:
-5 foobar
-4 foobar
-3 foobar
-2 foobar
-1 foobar
0 bar
1 bar
2 bar
3 bar
4 bar
5 bar
6 bar
7 bar
8 bar
9 bar
10 bar
11 foo
12 foo
13 foo
14 foo
三項演算子のネスト
三項演算子をネストする場合の文法は
(変数) = (条件がTrueのときの値) if (条件) else (条件がFalseのときの値) if (条件) else (条件がFalseのときの値) ...if-()-else-()無限につなげていく
ネストした三項演算子
In [38]: for v in range(-5, 15, 1):
...: p = 'foo' if v > 10 else 'foobar' if v < 0 else 'bar'
...: print(v, p)
-5 foobar
-4 foobar
-3 foobar
-2 foobar
-1 foobar
0 bar
1 bar
2 bar
3 bar
4 bar
5 bar
6 bar
7 bar
8 bar
9 bar
10 bar
11 foo
12 foo
13 foo
14 foo