はじめに

この実験では、Python 3.10 で導入された新しい Python の Switch Case 文(構造パターンマッチングとも呼ばれます)を使う方法を学びます。Switch Case 文を使うことで、従来のif-elif-else文と比較して、パターンをより簡単かつ読みやすくマッチさせることができます。

到達目標

  • Switch Case 文
  • if 文

Python の if 文との比較

Python の Switch Case 文の例に入る前に、従来のif-elif-else文と比較してみましょう。

次の HTTP レスポンスコードをマッチさせる例を考えてみましょう。

response_code = 200

if response_code == 200:
    print("OK")
elif response_code == 404:
    print("404 Not Found")
elif response_code == 500:
    print("Internal Server Error")

同じ例を Python の Switch Case 文を使って次のように書き直すことができます。

response_code = 201

match response_code:
    case 200:
        print("OK")
    case 404:
        print("404 Not Found")
    case 500:
        print("Internal Server Error")

ご覧の通り、Python の Switch Case 文はif-elif-else文と比較して、より簡潔で読みやすいです。

ここに switch case 文の構文を示します。

match term:
    case pattern-1:
        action-1
    case pattern-2:
        action-2
    case pattern-3:
        action-3
    case _:
        action-default

termはパターンと照合したい値です。パターンは単一の値、タプル、リスト、組み込みクラス、またはor演算子 (|) を使ったこれらの組み合わせです。_は任意の値とマッチする全て受け取るパターンです。

or パターンを使ったマッチング

この例では、パイプ文字 (| または or) が Python に 2 つ以上のケースに対して同じ応答を返すように許可します。

response_code = 502
match response_code:
    case 200 | 201:
        print("OK")
    case 500 | 502:
        print("Internal Server Error")

これは、response_codeが 500 または 502 のいずれかであるため、「Internal Server Error」と表示されます。

デフォルトケースを定義するためにアンダースコア記号_を使うことができます。次の例を考えてみましょう。

response_code = 800

match response_code:
    case 200 or 201:
        print("OK")
    case 500 or 502:
        print("Internal Server Error")
    case _:
        print("Invalid Code")

この例では、response_codeの値がどのケースにも該当しないため、出力は「Invalid Code」になります。

組み込みクラスのマッチング

組み込みクラスに基づいてパターンをマッチさせることもできます。次の例を考えてみましょう。

response_code = ["300"]

match response_code:
    case int():
        print('response_code is a number')
    case str():
        print('response_code is a string')
    case list():
        print('response_code is a list')
    case _:
        print('response_code is a unknown type')

これは、response_codeがリストであるため、「response_code is a list」と表示されます。

まとめ

この実験では、Python 3.10 で導入された Python の Switch Case 文を使う方法を学びました。従来のif-elif-else文と比較し、単一の値のマッチング、or パターン、反復可能オブジェクトの長さ、デフォルトケース用のアンダースコア記号、および組み込みクラスのいくつかの例を練習しました。

この実験が楽しめ、新しいことを学べたことを願っています!