Python
2022.01.28
Pythonでswitch/case文がない理由は?代用方法を解説!
2023.11.10

Pythonにはswitch文が存在しません。そのため、既存の機能で工夫する必要があります。

この記事ではPythonの既存機能を用いたswitch文の代用方法を紹介します。



1.switch文とは

ここではswitch文とはなにかを紹介します。


switch文とは条件分岐を制御する構文のひとつであり、特に3つ以上に分岐する際に利用されます。


文章だけではわかりにくいので、他の言語でどのように表すかを見てみましょう。以下はC++やC#での書き方です。

switch文の引数に入れた変数の値がtest1なら処理1、test2なら処理2が行われ、どれにも該当しない場合は処理3が行われます。このように、引数の値に応じて処理を分けられるのがswitch文の特徴です。


分岐が多い場合、if文と比べ見やすいコードになり、言語によってはif文より早く処理を行えます。


しかしPythonではswitch文がありませんので、別の方法で記述していく必要があります。

2.Pythonにswitch文がない理由


switch文がどのような構文なのか、どのようなメリットがあるかを紹介してきました。ここからはなぜPythonにswitch文がないのかを説明します。


Pythonにswitch文が実装されない理由として、公式ドキュメントには以下のように記述されています。


if… elif… elif… else の繰り返しで簡単に同じことができます。switch 文の構文に関する提案がいくつかありましたが、範囲判定をするべきか、あるいはどのようにするべきかについての合意は (まだ) 得られていません。


参考:Python switch case 文がないのはなぜですか?



If文を駆使することで同様の処理が行えるため、議論こそあったようですが実装はされなかったようです。


しかし、Python3.10からはswitch文と同様の構文の「match文」が導入されます。match文については後述します。



3.switch文に代わる書き方

ここからはPythonの既存機能を用いた代用方法を紹介していきます。

if文を使う

はじめに、公式ドキュメントにもあったように、if文を用いた代用方法を紹介します。

player_name = "Ichiro"
if player_name == "Ichiro":
    print("He is a baseball player")

elif player_name == "Ronaldo" or player_name == "Messi":
    print("He is a soccer player")

else:
    print("He is a professional player")

# He is a baseball player

こちらの例ではplayer_nameの値に応じて条件分岐を行っています。

player_nameがIchiroなら「He is a baseball player」、RonaldoかMessiなら「He is a soccer player」と表示され、それ以外の場合は「He is a professional player」と表示されます。

dictionary(辞書)を使う

次に辞書型を用いた代用方法を紹介します。

player_name = "Ichiro"
player_dic = {"Ichiro": "baseball", "Ronaldo": "soccer", "Messi": "soccer"}
if player_name in player_dic:
    result = player_dic[player_name]

else:
    result = "professional"

print(f"He is a {result} player")
# He is a baseball player

辞書内にあるキーが渡された場合は値を返し、ない場合はelse内で設定されているprofessionalが渡されます。ifによる分岐が多い場合は辞書型を利用したほうが短い行数で記述できます。

4.Python3.10の新機能


ここからはPython3.10から追加されたmatch文について紹介します。

match文とは

match文とはPython3.10から追加された新しい構文になります。2021年10月から利用可能になりました。他言語のswitch文と似た形で記述できるのが最大の特徴になります。

基本構文

ここからはmatch文の記述方法を紹介します。

player_name = "Ichiro"

match player_name:
    case "Ichiro":
        print("He is a baseball player")

    case "Ronaldo":
        print("He is a soccer player")
    
    case "Messi":
        print("He is a soccer player")
    # case "Ronaldo" or "Messi":とはできない

    case _:
        print("He is a professional player")

# He is a baseball player

"""
Python3.10で実行するには3.10をダウンロードする必要があります。
https://www.python.org/downloads/
ダウンロード後にコマンドプロンプト等で
py -3.10 ファイル名
と入力することで実行できます。
"""

このようにswitch文と近い形で記述できます。ここで注意すべき点は、case以降が式ではなく文であることです。よってorでまとめる処理などが行えません。






この記事をシェア