Pythonのmatch文(パターンマッチング)の使い方!switch文の代替
生徒
「PythonでもJavaScriptのswitch文みたいに、条件に応じて処理を切り替えられるものってありますか?」
先生
「はい、Python 3.10以降ではmatch文
というパターンマッチングの仕組みが使えます。switch文の代わりになって、とても読みやすく書けますよ。」
生徒
「パターンマッチング?なんだか難しそうです…」
先生
「最初は“match 〇〇”、“case △△”で分岐すると覚えれば大丈夫です。それでは優しく学んでいきましょう!」
1. match文とは?switch文との違い
match文(マッチぶん)は、値やデータの形(パターン)に応じて処理を分ける構文です。Python 3.10から導入され、JavaやJavaScriptのswitch文
のような書き方ができます。
switch文と同じように、「変数の値に応じて分岐させる」処理ができますが、match文はもっと強力で、リストや辞書の中身までチェックできます。
2. match文の基本構文
まずは簡単な例で書き方を見てみましょう。
value = 2
match value:
case 1:
print("1です")
case 2:
print("2です")
case _:
print("1でも2でもありません")
2です
case _
は「どれにも当てはまらないときの処理」で、デフォルトの分岐に使います。
3. 複数の値をまとめてチェック
caseにカンマ区切りで複数の値を書くと、いずれかに一致するかどうかをまとめて調べられます。
value = 3
match value:
case 1 | 2:
print("1か2です")
case 3:
print("3です")
case _:
print("それ以外です")
3です
1 | 2
で「1または2」という意味になります。
4. リストの中身で分岐する
match文はリストの形を見ることもできます。要素が決まった長さや中身かどうかを簡単に分岐できます。
data = [10, 20]
match data:
case [x, y]:
print(f"xは{x}で、yは{y}です")
case _:
print("他の形です")
xは10で、yは20です
[x, y]
で「要素が2つあるリスト」としてマッチしています。
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文は**複雑な条件をすっきり書ける**、**リストや辞書などデータ構造で分岐できる**などのメリットがあります。
複数の条件分岐やデータの形に応じてきれいに分岐したいときに、とても便利です。