Pythonのmatch文(パターンマッチング)の使い方!switch文の代替
生徒
「PythonでもJavaScriptのswitch文みたいに、条件に応じて処理を切り替えられるものってありますか?」
先生
「はい、Python 3.10以降ではmatch文というパターンマッチングの仕組みが使えます。switch文の代わりになって、とても読みやすく書けますよ。」
生徒
「パターンマッチング?なんだか難しそうです…」
先生
「最初は“match 〇〇”、“case △△”で分岐すると覚えれば大丈夫です。それでは優しく学んでいきましょう!」
1. match文とは?switch文との違い
match文(マッチぶん)は、変数の値やデータの形(パターン)に応じて、
処理の流れを分けるための構文です。Python 3.10から新しく追加され、
JavaやJavaScriptで使われているswitch文の代わりとして利用できます。
if文を何度も書かなくてよいため、コード全体がすっきり読みやすくなるのが特徴です。
switch文と同じように「ある値に応じて処理を切り替える」ことができますが、 match文はそれだけでなく、リストや辞書といったデータ構造の形そのものでも 分岐できる点が大きな違いです。そのため、複雑な条件分岐でも整理して書けます。 プログラミング未経験の方でも、上から順に読めば処理の流れを理解しやすい構文です。
command = "start"
match command:
case "start":
print("開始します")
case "stop":
print("停止します")
case _:
print("不明なコマンドです")
開始します
このように、match文では「値がこれだったらこの処理」という形で
分岐を書いていきます。case _は、どの条件にも当てはまらない場合の
処理を書くためのもので、switch文のdefaultに近い役割を持っています。
まずは「matchとcaseで条件分岐できる」と覚えるところから始めましょう。
2. match文の基本構文
match文の基本的な書き方はとてもシンプルで、 「どの値だったら、どの処理を行うか」を順番に並べて書いていきます。 if文を何段も重ねる代わりに使えるため、条件分岐の流れが一目で分かりやすくなるのが特徴です。 プログラミング未経験の方でも、上から読んでいくだけで処理の内容を理解しやすくなります。
value = 2
match value:
case 1:
print("1です")
case 2:
print("2です")
case _:
print("1でも2でもありません")
2です
この例では、valueの値が何かによって処理を切り替えています。
case 1は「valueが1のとき」、case 2は「valueが2のとき」を意味します。
実際の値と一致したcaseの中だけが実行されるため、
条件がはっきりしていて読みやすいのがポイントです。
また、case _は「それ以外すべて」を表す特別な書き方です。
どのcaseにも当てはまらなかった場合に実行されるため、
if文でいうelseと同じ役割を持っています。
match文を書くときは、最後にcase _を用意しておくと、
想定外の値が来たときでも安全に処理できます。
まずは「matchで値を比べてcaseで分岐する」という基本をしっかり押さえておきましょう。
3. 複数の値をまとめてチェック
「1のとき」「2のとき」のように、似た処理をいくつも書きたい場合は、
match文の複数マッチが便利です。caseの中で|(パイプ)を使うと、
「どれか一つでも当てはまればOK」という形で、まとめて分岐できます。
条件をコンパクトに書けるので、読み間違いも減らしやすくなります。
value = 3
match value:
case 1 | 2:
print("1か2です")
case 3:
print("3です")
case _:
print("それ以外です")
3です
この例では、case 1 | 2が「1または2ならここを実行」という意味です。
そしてvalueが3なので、次のcase 3が選ばれて「3です」と表示されます。
もしvalueが1や2なら、最初の分岐が実行されます。
たとえば、信号の色やメニュー番号のように「いくつかを同じ扱いにしたい」場面はよくあります。
そのときに、|でまとめておくと、コードが短くなり意図も伝わりやすいです。
最後にcase _を置いておけば、想定外の値が来たときも「それ以外です」と安全に受け止められます。
4. リストの中身で分岐する
match文は、数値や文字だけでなくリストの形そのものを見て分岐できるのが大きな特徴です。 「要素がいくつあるか」「どんな並びになっているか」といった情報を使って処理を切り替えられるため、 データの内容に応じた分かりやすい条件分岐が書けます。 if文で長さを調べたり、要素を一つずつ確認したりする必要がない点も便利です。
data = [10, 20]
match data:
case [x, y]:
print(f"xは{x}で、yは{y}です")
case _:
print("他の形です")
xは10で、yは20です
この例では、[x, y]という書き方で「要素が2つあるリスト」を表しています。
リストの中身がちょうど2つであれば、自動的に1つ目がx、2つ目がyに代入されます。
そのため、リストの要素をすぐに使った処理を書けるのがポイントです。
もし要素の数が違ったり、リスト以外の値が来た場合は、case _が実行されます。
これにより「想定した形のデータかどうか」を安全に判定できます。
リストの構造で分岐できるmatch文は、データ処理や入力チェックの場面で特に役立つので、
「リストの形でも条件分岐できる」と覚えておくと理解が深まります。
5. 辞書(dictionary)でキーと値をチェック
辞書の場合もmatch文は役立ちます。キーや値に応じた処理を分けられます。
person = {"name": "太郎", "age": 20}
match person:
case {"name": n, "age": a}:
print(f"名前が{n}で、年齢が{a}歳です")
case _:
print("予期しないデータです")
名前が太郎で、年齢が20歳です
この例では、辞書のキーと変数n, aに値を代入しています。
6. ワイルドカードと変数代入
case {"age": a}のように、部分パターンだけを見て変数に値を代入できます。_はワイルドカードで「何でもOK」です。
person = {"age": 30}
match person:
case {"age": age}:
print(f"年齢は{age}歳です")
case _:
print("年齢情報がありません")
年齢は30歳です
7. 応用:ガード条件を使ってより詳細に
caseにif条件をつけることで、より細かく分岐できます。これをガード条件といいます。
value = 15
match value:
case x if x < 10:
print("10未満です")
case x if x < 20:
print("10以上20未満です")
case _:
print("20以上です")
10以上20未満です
8. match文がおすすめの理由
match文は**複雑な条件をすっきり書ける**、**リストや辞書などデータ構造で分岐できる**などのメリットがあります。
複数の条件分岐やデータの形に応じてきれいに分岐したいときに、とても便利です。
まとめ
match文で学んだことの振り返り
この記事では、Python三点一〇以降で使えるmatch文(パターンマッチング)について、 基本から応用までを順番に学んできました。match文は、これまでif文をたくさん並べて書いていた 条件分岐を、より読みやすく、整理された形で書けるのが大きな特徴です。 JavaScriptやJavaのswitch文に近い感覚で使えるため、他の言語経験がある方にも理解しやすい構文です。
最初に学んだのは、matchとcaseを使った基本的な値の分岐です。
数値や文字列といった単純な値に応じて処理を切り替える場合、
match文を使うことで「どの値のときに何をするのか」が一目で分かるようになります。
特にcase _を使ったデフォルト処理は、想定外の値が来たときの保険として重要でした。
次に、複数の値をまとめてチェックする書き方や、リストの形で分岐する方法を学びました。 match文では、リストの要素数や並びそのものを条件として扱えるため、 データの構造に注目した分岐ができます。 これはif文では書きにくかった部分であり、match文ならではの強みと言えるでしょう。
さらに、辞書(ディクショナリ)を使ったパターンマッチングでは、 キーと値を同時にチェックしながら、値を変数として受け取れる点が印象的でした。 APIのレスポンスや設定データのように、決まったキーを持つデータを扱う場面では、 match文を使うことで処理の流れがとても自然になります。
ガード条件を使った応用では、単に値が一致するかどうかだけでなく、 数値の範囲や条件付きの判定も組み合わせられることを確認しました。 これにより、「十未満」「十以上二十未満」といった細かい条件分岐も、 ひとつのmatch文の中で整理して書けるようになります。
まとめとしてのサンプルプログラム
score = 75
match score:
case x if x >= 90:
print("評価はAです")
case x if x >= 70:
print("評価はBです")
case x if x >= 50:
print("評価はCです")
case _:
print("評価はDです")
評価はBです
このサンプルでは、点数に応じて評価を分岐しています。 if文でも書けますが、match文を使うことで条件の並びが整理され、 上から順に意味を追いやすくなっています。 条件が増えても読みやすさを保ちやすい点は、実務でも大きなメリットになります。
生徒
「最初はmatch文って難しそうだと思っていましたけど、 if文の代わりとして考えると、意外と分かりやすかったです。 特にcaseごとに処理が整理されているのが見やすいですね。」
先生
「そうですね。match文は、条件が増えたときほど効果を発揮します。 値だけでなく、リストや辞書の形で分岐できるのが大きな特徴です。」
生徒
「辞書の中身で分岐できるのは便利だと思いました。 APIのデータを扱うときにも使えそうですね。」
先生
「その通りです。Pythonのmatch文は、 単なるswitch文の代替ではなく、データ構造を活かした分岐ができます。 これからPythonで処理を書くときの選択肢として、ぜひ活用してください。」
生徒
「はい。まずは簡単な条件分岐からmatch文を使って、 慣れてきたらリストや辞書にも挑戦してみます!」
今回学んだmatch文を理解しておくことで、Pythonの条件分岐の書き方の幅が大きく広がります。 if文と使い分けながら、読みやすく保守しやすいコードを書く力を身につけていきましょう。