Python 3.10では、新たな機能として「構造的パターンマッチング」が導入されました。これは、他の言語でよく見られるswitch文に似ていますが、より強力で柔軟性があります。

リテラルマッチング

これは、switch文のような使い方をすることができます。例えば、次のように書くことができます。

def http_error(status):
    match status:
        case 400:
            return "Bad request"
        case 404:
            return "Not found"
        case 418:
            return "I'm a teapot"
        case _:
            return "Something's wrong with the Internet"

この例では、statusの値を見てそれに対応するエラーメッセージを返しています。

リテラルと変数の組み合わせ

もう少し複雑な例を考えてみましょう。点を(x,y)のタプルで表すとして、それによって今どこにいるのかを文字列で返す関数は以下のように書けます。

def where_am_i(point):
    match point:
        case (0, 0):
            return "Origin"
        case (0, y):
            return f"Y={y}"
        case (x, 0):
            return f"X={x}"
        case (x, y):
            return f"X={x}, Y={y}"
        case _:
            raise ValueError("Not a point")

クラスでのマッチング

前の例では点を表すのにタプルを使っていましたが、クラスを使うこともできます。

from dataclasses import dataclass

@dataclass
class Point:
    x: int
    y: int

def where_am_i(point: Point):
    match point:
        case Point(x=0, y=0):
            return "Origin"
        case Point(x=0, y=yy):
            return f"Y={yy}"
        case Point(x=xx, y=0):
            return f"X={xx}"
        case Point(x=xx, y=yy):
            return f"X={xx}, Y={yy}"
        case _:
            raise ValueError("Not a point")

以上のように、Python 3.10のmatch文は、switch文のような使い方から、より複雑なパターンマッチングまで、多岐にわたる使い方が可能です。これにより、Pythonのコードがより直感的で読みやすくなります。

投稿者 admin

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です