Pythonのmatch文(パターンマッチング)とは?switch文の代替としての使い方をやさしく解説
生徒
「先生、Pythonにはswitch文ってないんですか?条件によって処理を変えたいときに便利そうなので知りたいです。」
先生
「Pythonにはswitch文は昔はありませんでしたが、最近できたmatch文というものがあります。これがswitch文の代わりに使える新しい書き方です。」
生徒
「match文って何ですか?名前からは何となくわかるけど、具体的にどう使うんですか?」
先生
「簡単に言うと、match文は『値がどのパターンに当てはまるかを調べて、それぞれの処理を行う』ためのものです。初心者でもわかりやすいように、まずはswitch文と比較しながら説明しましょう。」
1. Pythonのmatch文(パターンマッチング)とは?
Pythonのmatch文は、2021年にリリースされたPython 3.10から使えるようになった新しい構文で、「パターンマッチング」と呼ばれます。これは「ある値がどんな形や内容かを調べて、そのパターンごとに処理を分ける」という仕組みです。
簡単に言えば、条件に応じて処理を切り替える方法ですが、今までよく使われてきたif-elif-else文よりも読みやすく書ける場合があります。
パターンマッチングはプログラミング言語によっては「switch文」や「case文」と呼ばれる機能に似ていますが、Pythonではmatch文として独自の形で実装されています。
2. switch文とは?Pythonでの代わりの書き方
プログラミング言語によっては「switch文」というものがあり、これは「ある変数の値によって、複数の処理を分ける」ためのものです。たとえば、JavaやC言語、JavaScriptなどにあります。
Pythonでは昔はswitch文がなかったため、代わりにif-elif-elseを使って処理を分けていました。例えば:
fruit = "りんご"
if fruit == "りんご":
print("赤くて甘い果物です。")
elif fruit == "バナナ":
print("黄色くて長い果物です。")
elif fruit == "みかん":
print("オレンジ色でジューシーな果物です。")
else:
print("知らない果物です。")
この書き方でも問題ありませんが、条件が増えると少し読みづらくなります。そこでPython 3.10からmatch文を使う方法が出てきました。
3. Pythonのmatch文の基本的な使い方
では、上のif-elif文をmatch文で書き換えてみましょう。
fruit = "りんご"
match fruit:
case "りんご":
print("赤くて甘い果物です。")
case "バナナ":
print("黄色くて長い果物です。")
case "みかん":
print("オレンジ色でジューシーな果物です。")
case _:
print("知らない果物です。")
ポイントは以下の通りです:
match 変数名:のあとに、case パターン:と書きます。- それぞれの
caseの後には、その条件に合ったときに実行する処理を書きます。 case _:の「_(アンダースコア)」は「どれにも当てはまらなかったら」という意味の「デフォルト」役割です。
4. match文の特徴とif文との違い
match文は単純に値を比べるだけでなく、もっと複雑なパターンを調べられるのが特徴です。
たとえば、リストや辞書の中身の形を判別したり、変数の値を取り出して使ったりできます。これにより、プログラムをより簡潔に、そしてわかりやすく書けるのです。
一方で、if文は「条件式が真かどうか」をひとつずつ判断していくのに対し、match文は「値がどのパターンに当てはまるか」を判別する仕組みです。
初心者のうちは、単純な値の比較はmatch文でもif-elif文でも同じように使えます。慣れてきたらmatch文の便利な使い方も学んでみましょう。
5. もっと具体的なmatch文の例:数字による判定
次は、数字の値を判別する例です。
number = 2
match number:
case 1:
print("数字は1です。")
case 2:
print("数字は2です。")
case 3 | 4 | 5: # 3,4,5のいずれかならここに入る
print("数字は3、4、または5のいずれかです。")
case _:
print("数字は1〜5の範囲外です。")
ポイント:
3 | 4 | 5は「3か4か5」のどれかに当てはまることを意味します。- 複数の値をまとめて扱いたいときに便利です。
6. match文で変数の中身を取り出す(パターンの中で値を使う)
match文は、パターンの中で値を変数として受け取ることもできます。例えばリストの中身を見て処理を変えたいときに使えます。
point = (10, 20)
match point:
case (0, 0):
print("原点にいます。")
case (x, 0):
print(f"x軸上にいます。xの値は{x}です。")
case (0, y):
print(f"y軸上にいます。yの値は{y}です。")
case (x, y):
print(f"座標はx={x}, y={y}です。")
ここでは、pointというタプル(2つの数字の組み合わせ)を調べています。case (x, 0):のように書くと、「2つ目が0で1つ目の値はxに入れる」という意味です。
7. match文が使えるPythonのバージョンについて
重要なのは、match文はPython 3.10以上で使えるということです。もしあなたのパソコンのPythonのバージョンが3.9以下の場合は、まずPythonをアップデートする必要があります。
Pythonのバージョン確認は、ターミナル(コマンドプロンプト)で以下のように入力します。
python --version
3.10以上であれば、今回紹介したmatch文を使えます。
8. match文のメリットと注意点
メリット:
- コードが読みやすくなる
- 複雑な条件分岐をシンプルに書ける
- パターンにマッチしなければ
case _:で簡単に対応可能
注意点:
- Python 3.10以上が必要
- 初心者には最初は
if-elif文の方がわかりやすいかもしれません - 使いすぎるとコードが複雑になる場合もあるので使いどころを考えましょう
9. まとめ
今回はPythonのmatch文について、switch文の代替としての使い方をやさしく解説しました。条件によって処理を分けるときに、match文を使うとコードがスッキリ書ける場合があります。
最初はif-elif文を使うことも多いですが、Python 3.10以降ならぜひmatch文にも挑戦してみてください。
まとめ
Pythonのmatch文(パターンマッチング)は、条件分岐をより直感的に整理できる便利な構文であり、複雑な条件の整理や可読性向上に大きく役立ちます。とくにswitch文が存在しないPythonにおいて、match文は値の種類・形・パターンを柔軟に判定できる強力な手法です。本記事では、基本構文から実践的なパターンマッチングまで幅広く紹介しました。ここではさらに踏み込んで、実際の開発でも役立つパターンや注意点を整理し、Pythonのmatch文をより深く理解するための総合的なまとめを行います。
◆ match文の理解を深めるポイント
match文は単純な値だけでなく、タプルやリスト、辞書、複数条件のOR(|)などにも柔軟に対応できます。さらにcaseブロック内で変数を抽出し、そのまま新しい値として利用できるため、if文よりも状況に応じた分岐をスムーズに表現できます。これはPython特有の表現力の高さを活かした書き方であり、コード量を減らしながら処理の意図を明確にできます。
◆ match文を使った実践的なサンプルコード
以下は、文字列・数字・タプル・辞書など複数のデータ形式に対応した高度なパターンマッチング例です。
data = {"type": "user", "name": "たろう", "age": 20}
match data:
case {"type": "user", "name": name, "age": age} if age >= 18:
print(f"{name}さんは大人のユーザーとして登録されています。")
case {"type": "user", "name": name, "age": age}:
print(f"{name}さんは未成年のユーザーです。")
case {"type": "guest"}:
print("ゲストとしてアクセスしています。")
case _:
print("データ形式が不明です。")
このように辞書から値を抽出し、追加条件(ifガード)まで組み合わせることで、複雑なロジックを非常に読みやすく表現できます。特にWebアプリケーションやAPI処理など、データ構造が変化しやすい場面でmatch文は効果を発揮し、Pythonの柔軟な構文を活かしたコード設計に大きく貢献します。
◆ match文を使う際の注意点
match文は便利ですが、すべての条件分岐に使う必要はありません。比較的シンプルな判断では従来のif-elif-else文のほうが読みやすくなる場合もあります。また、Python 3.10以上が必須であるため、実行環境のバージョンにも注意する必要があります。特に企業や学校など古いバージョンのPythonが使われている環境では、本番適用前にバージョン確認は欠かせません。
◆ match文を活用することで得られるメリット
・複雑な条件分岐を整理して可読性を高める
・パターンに応じた値抽出で処理を簡潔に書ける
・複数値の比較やデータ構造の判定が容易になる
・ネストが深くならず、初心者でもロジックが追いやすい
・Pythonの新しい書き方を習得することで開発の幅が広がる
これらの特徴は、プログラムの保守性やチーム開発の品質にも関わる重要なポイントです。match文は慣れると非常に強力で頼もしい構文なので、今後のPython学習でも積極的に活用していくとよいでしょう。
◆ 応用例:リストや組み合わせパターンの判定
values = [1, 2, 3]
match values:
case [x, y, z]:
print(f"3つの値が含まれています: {x}, {y}, {z}")
case [x, y]:
print(f"2つの値が含まれています: {x}, {y}")
case [x]:
print(f"1つの値が含まれています: {x}")
case _:
print("値の数が予想と異なります。")
リストの要素数に応じて分岐するような処理も、match文なら非常に読みやすくスッキリ書くことができます。データ分析や配列操作、ゲーム開発などでも役立つテクニックです。
生徒
「match文って、switch文みたいなものだけど、もっと柔軟に使えるんですね!特に辞書やリストも判定できるのが便利だと思いました。」
先生
「その通りです。Pythonではデータ構造が複雑になることも多いので、match文のパターンマッチングは非常に相性がいいんですよ。値を取り出して変数に代入する形も自然ですね。」
生徒
「確かに、if文だと長くなってしまう処理も、match文ならすっきり書けました。Pythonをもっと深く学べそうです!」
先生
「match文はPython 3.10以降の新しい文法ですが、慣れると非常に便利です。パターンの仕組みを理解して、ぜひ実際のコードでも試してみてくださいね。」