Address
304 North Cardinal St.
Dorchester Center, MA 02124

Work Hours
Monday to Friday: 7AM - 7PM
Weekend: 10AM - 5PM

Pythonのmatch文の使い方

【Python入門】if文をわかりやすく書けるmatch文の解説

Pythonの「match文+caseブロック」の基本的な使い方の解説。複雑なif文を見やすく、シンプルに書ける効果あり

今回はPythonのif文をよりわかりやすく、より見やすく記述できるmatch文の紹介とその基本的な使い方の解説です。

match文はPythonのバージョン3.10から導入された文法ですので、それ以前のバージョンではエラーとなります。注意してください。

if文との見た目の違いは?

まず簡単なコードを使ったif文との違いを示します。

def get_remainder(remainder):
    if remainder == 1:
        print("余りは1です")
    elif remainder == 2:
        print("余りは2です")
    else:
        print("余りは0です") 


get_remainder(5%3)
def get_remainder(remainder):
    match remainder:
        case 1:
            print("余りは1です")
        case 2:
            print("余りは2です")
        case _:
            print("余りは0です")

get_remainder(5%3)

どうでしょうか。違いがわかるでしょうか。match文を使ったほうがちょっと見やすい感じがしませんか?

これまでPythonでは、「Aの場合、Bの場合、C場合・・・」と条件分岐させるときは、if文+elif/elseを組み合わせて複雑な条件分岐を作ることができました。

ですが、

elif remainder == 2:

という書き方を連ねて複数の条件を記述するのはちょっと煩雑な感じがしませんか?

そこでmatch文の登場というわけです。以下、その基本的な使い方を見ていきましょう。

match文の基本的な使い方

公式ドキュメント

mathch文

使い方の基本

match文の基本的使い方は次のようになります。

match 式:
    case パターン1:
        処理

    case パターン2:
        処理
    
    case パターン3:
        処理
    (略)

この処理の流れは次の通りです。

matchの後の式が評価され、なんらかの値が得られる
↓
その値がcaseブロックのパターン1と一致するかチェック
↓
一致すればそのcaseブロックにかかれている処理が実行される
↓
一致しなければ以後のcaseブロックへ移動し、パターン2と一致するかチェック
↓
一致すればそのcaseブロックの処理が実行される
↓
一致しなければ以後のcaseブロックへ移動し、パターン3と一致するかチェック
↓
以下略

このようになります。

具体例

次のコードを見てください。処理の流れは上で説明したことと、コメントアウトした部分を読んでもらえればわかると思います。

# 5%3の実行結果として、余りの値「2」が、関数get_remainderの仮引数remainderに代入される
def get_remainder(remainder):
    #remainderが評価され、その値は2であると把握される
    match remainder:
        # remainderの値が値「1」と一致するかチェック
        case 1:
            print("余りは1です")
        # remainderの値が値「2」と一致するかチェック
        case 2:
            print("余りは2です")
    # _ は ワイルドカードとして機能し、必ずそのcaseブロックはチェックされる
        case _:
            print("余りは0です")


# 5%3の実行結果として、余りの値「2」が、関数get_remainderの仮引数remainderに渡される
get_remainder(5%3)

結果は、

余りは2です

となります。

以上、あくまでmatch文の初歩的な使い方の解説でしたが、if文の代わりに使えることがわかっていただけたと思います。