Python 3.10から、新たな構文が導入されました。それはmatch
とcase
を使用するパターンマッチングです。
match value:
case 1:
...
case _:
...
この構文は、単純な値での分岐の他に、データ構造やアトリビュートのパターンでの分岐なども可能となっています。見た目は他のオブジェクト指向型の言語によくあるswitch case
に似ていますが、どちらかというと関数型言語のパターンマッチングに近いイメージで捉えるのがよさそうです。
match value:
case 1:
print("It's 1")
case _:
print("It's not 1")
上記の例では、value
が1であれば”It’s 1″を出力し、それ以外の場合は”It’s not 1″を出力します。
しかし、注意点として、match
文はif
文と異なり、条件式に対応できないという落とし穴があります。そのため、if
文と同じように、for
文と組み合わせて使うことが多いです。
for i in list:
match i:
case i if i % 2 ==0:
print(f"{i} is even")
case i if i % 3 ==0:
print(f"{i} is a multiple of 3")
case _:
print(f"{i} is neither even nor a multiple of 3")
上記の例では、リストの各要素i
に対して、i
が2の倍数であれば”{i} is even”を出力し、2の倍数でなく3の倍数であれば”{i} is a multiple of 3″を出力し、それ以外の場合は”{i} is neither even nor a multiple of 3″を出力します。
このように、Python 3.10のmatch
文は、コードの可読性を向上させ、よりPythonicなコードを書くのに役立つ強力な機能です。