今回は、Pythonでcaseやswitchを使わず複数条件を並べる方法についてご紹介します。
Pythonでcaseやswitchの代わりに複数条件を指定する方法とは
PythonにはC言語やJavaなどにあるswitch/case構文がありません。
その代わりに複数の条件を扱う方法として、if-elif-else文や辞書、そしてPython 3.10以降のmatch-case文がよく利用されます。
それぞれの特徴を押さえておくと、可読性の高いコードを書く手助けになります。
if-elif-else文による基本的な条件分岐
もっともよく使われる方法が、if-elif-else文による分岐です。
複数の条件を順番に評価するため、処理の流れが直感的にわかりやすいという利点があります。
一方で条件が増えたり入れ子が深くなったりすると、コードが冗長になりがちです。
以下に具体例を示します。
1 2 3 4 5 6 7 8 9 10 11 12 |
def process_value(val): if val == 1: result = "One" elif val == 2: result = "Two" elif val in (3, 4): result = "Three or Four" else: result = "Other" return result print(process_value(3)) |
Three or Four
if-elif-else文では、複数の値をまとめて判定したい場合にin演算子を活用する方法があります。
このようにすれば、3や4など複数の値に対して同じ処理をまとめて指定できます。
辞書を利用した方法
辞書(ディクショナリ)を活用すると、条件と対応する処理をキーと値の形で管理できます。
関数を辞書の値として登録すれば、複数の条件をシンプルに切り分けることが可能です。
以下は、キーごとに異なる関数を呼び出す例です。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
def one(): return "One" def two(): return "Two" def three_or_four(): return "Three or Four" def default(): return "Other" def process_value(val): switcher = { 1: one, 2: two, 3: three_or_four, 4: three_or_four, } func = switcher.get(val, default) return func() print(process_value(2)) |
Two
上記のように、switcher.get(val, default)を使えば、登録されていない値が渡されたときにdefault関数を呼び出すことができます。
辞書方式は、コードをスッキリ書ける一方で、値ではなく条件式を細かく書きたい場合に工夫が必要になることがあります。
Python 3.10以降のmatch-case文
Python 3.10で導入された構造的パターンマッチング(match-case文)を使うと、switch/caseに近い記述ができます。
値だけでなく、複合的なパターンにもマッチさせることができる点が大きな特徴です。
単純なケースでも可読性が高くなるので、環境が許すなら積極的に導入しても良いでしょう。
1 2 3 4 5 6 7 8 9 10 11 12 |
def process_value(val): match val: case 1: return "One" case 2: return "Two" case 3 | 4: return "Three or Four" case _: return "Other" print(process_value(4)) |
Three or Four
match-case文ではパイプ記号(|)を使って複数の条件を同時に指定できます。
ただしPython 3.10以上でしか動作しないため、バージョンが古い場合は前述のif-elif-elseや辞書の方法を検討する必要があります。
よくあるエラーと注意点
辞書を用いる際、キーが存在しない場合の処理を用意し忘れるとKeyErrorが発生する点に注意が必要です。
また、match-case文は古いバージョンのPythonではエラーになり、実行できないので事前にpython –version等でバージョンを確認しましょう。
if-elif-else文の場合は特に構文エラーが起きやすいわけではありませんが、条件の記述を誤ったりネストが深すぎたりして可読性が損なわれることがあります。
まとめ
Pythonではswitch/case構文の代わりに、if-elif-else文・辞書・match-case文などを使って複数の条件を指定することができます。
コードの可読性や実行環境のバージョンに応じて、適切な方法を選ぶと良いでしょう。
今回紹介したポイントを参考に、さまざまな場面で活用してみてください。