Pythonの三項演算子の書き方

2017年5月10日

PythonでもPHPなどと同じく三項演算子を使うことができますが、若干構文が異なるため忘れないようにメモしておきます。

構文

(変数) = (条件がTrueの時の値) if (条件) else (条件がFalseの時の値)

if n == 1:
  x = True
else:
  x = False

このようにif〜elseのブロックで実装されたコードを

x = True if n == 1 else False

といったように三項演算子で表現することができます。

使い所

三項演算子はあくまで「演算子」なので処理の分岐を省略するために使うべきではありません。

2つ(もしくはそれ以上)の中から1つを選択するという処理を行う場合に利用しましょう。

つまり、上の例にある「条件がTrueの時の値」のところに処理を入れなければならない場合は三項演算子を使うべきではないということですね。

三項演算子を利用することによる可読性への影響について

私は三項演算子を「正しく」使えてるのであれば、可読性が低下することはないと思っています。よく「三項演算子は読みにくくて可読性が落ちる」などと言われますが、それは単純にif文で表現すべきところでも三項演算子を使ってしまっているためにコードが複雑になっているかじゃないかと思います。

あとは単純にコードが横に長くなるので、横スクロールしないといけなかったり、三項演算子内で使われてる変数の命名がおかしいとかかと・・・。これに関しては三項演算子が悪いのではなく、何も考えずに変数名をつけるのが悪いので、きちんと「シンプル」で「意味のある」変数名をつけてあげることで解消できると思います。

時間がないと変数名など「後で直すから」と思って適当につけてそのまま放置・・・。ということも結構あると思いますが、最初に変数を定義する際にちゃんとした変数名を考える方が後でコードをリファクタリングするよりも精神衛生上良いかと思うので、急いでてもちょっと立ち止まって変数名をつけてあげましょう。

最後に

三項演算子を利用することで処理をシンプルに表現することができ、ステップ数も削減できるようになりますが、プロジェクトによっては三項演算子を禁止しているところもあると思うので、三項演算子を利用する場合はプロジェクトのコード規約などを確認した上で利用するようにしましょう。