【Python】case文の使い方を紹介(python 3.10からの新機能)
今回はPythonのmatch-case文の使い方を紹介します。
これはpython 3.10からの新機能になります。
match-case文は他の言語にある、次のような機能と同じような機能です。
- C#:switch-case
- Java:switch-case
- VBA:Select Case
Pythonとしてはdictやif elifがあるのでこれまで見送ってきたのですが、caseの方が可読性が高いという理由から他の言語同様に機能追加されました。
match-case文を活用して、可読性のよいプログラムを作りましょう。
match-case文の使い方
def process_data(data):
match data:
case 1:
print("データは1です")
case 2:
print("データは2です")
case 3:
print("データは3です")
case _:
# どのcaseにも一致しなかった場合
print("データは1、2、3のいずれでもありません")
# 使用例
process_data(1) # データは1です
process_data(2) # データは2です
process_data(4) # データは1、2、3のいずれでもありません
match-case文はこのように書きます。
matchの後の値dataが、各caseと一致するとその中のコードブロックが実行されます。
サンプルコードのようにcase _:を書くと、いずれにも一致しなかったときは、この中のコードブロックが実行されます。
match-case文のキャプチャパターンについて
def process_data(data):
match data:
case [x, y]:
print(f"2要素のリスト: {x}, {y}")
case [x, y, z]:
print(f"3要素のリスト: {x}, {y}, {z}")
case _:
print("その他")
process_data([1, 2]) # 2要素のリスト: 1, 2
process_data([3, 4, 5]) # 3要素のリスト: 3, 4, 5
process_data([1]) # その他
caseの条件に変数(ここではx, y, z)を書くと、matchの後の値dataが変数に代入され、そのまま条件と一致するか判定が行われます。
代入された値はそのまま利用できるのでサンプルコードのようにprintさせたりすることもできます。
match-case文でデータ型を判定する方法
def process_data(data):
match data:
case int(x):
print("整数型の値です")
case str(x):
print("文字列型の値です")
case float(x):
print("浮動小数点型の値です")
case _:
print("その他の型の値です")
# 使用例
process_data(10) # 整数型の値です
process_data("Hello") # 文字列型の値です
process_data(3.14) # 浮動小数点型の値です
process_data([1, 2, 3]) # その他の型の値です
match-case文でデータ型を判定するには先ほどのキャプチャパターンを利用します。
case class(x):としておくことで、データ型に対応した処理を実行させることができます。
注意事項
caseは予約語ですが、変数として使うとオーバーライド(上書き)してしまうので注意しましょう。
(特に旧バージョンで作成したスクリプトを実行するときには注意が必要です)