Python 3.10では、新たにパターンマッチングという機能が導入されました。これは、特定のパターンに一致する値を変数に代入するための機能で、以下のようなコードを書くことが可能になりました。
def handle(retcode):
match retcode:
case 200:
print('success')
case 404:
print('not found')
case _:
print('unknown')
しかし、この新機能には一つ注意点があります。それは、リテラル値(直接書かれた値)以外の値をパターンマッチングで使用すると、エラーが発生するということです。例えば、以下のようなコードはエラーとなります。
SUCCESS = 200
NOT_FOUND = 404
def handle(retcode):
match retcode:
case SUCCESS:
print('success')
case NOT_FOUND:
print('not found')
case _:
print('unknown')
この問題を解決するためには、定数(変更されない値)を格納するクラスを作成し、そのクラスの属性として定数を定義する方法があります。以下にその例を示します。
class Codes:
SUCCESS = 200
NOT_FOUND = 404
def handle(retcode):
match retcode:
case Codes.SUCCESS:
print('success')
case Codes.NOT_FOUND:
print('not found')
case _:
print('unknown')
このように、Python 3.10のパターンマッチングは強力な機能ですが、その使用方法には注意が必要です。特に、変数に格納された値をパターンとして使用する場合には、上記のような工夫が必要となります。