More than 1 year has passed since last update.

三項演算子は単純な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


参考

Qiita - 三項演算子(Python)