Python 3.10から導入された新機能、match
文。このmatch
文は、if
文のような使い方ができますが、その使い方には注意が必要です。
まず、match
文の基本的な書き方を見てみましょう。
match 変数:
case パターン1:
return 返り値1
case パターン2:
return 返り値2
case _:
return 例外処理
このように書いたとき、変数がパターン1であれば返り値1、パターン2であれば返り値2、それ以外の値であれば例外処理の結果が返ってきます。
しかし、match
文の中でbreak
を使うとどうなるでしょうか。一般的に、break
は現在のループを終了し、そのループの直後の次の文から実行を再開します。しかし、match
文の中でbreak
を使うと、match
ケースだけでなく、イベントループも終了してしまいます。
これは、match
文の中では、計算処理を入れることができないためです。例えば、i + 1
といった処理を入れることはできません。
したがって、match
文の中で早期にbreak
をしたい場合は、例外を使ってエミュレートすることができます。
class _MyBreak(Exception):
pass
foo = 5
bar = 3
try:
match foo:
case 5:
if bar > 1:
print("about to break")
raise _MyBreak()
print("not reached")
case 42:
pass
except _MyBreak:
pass
このように、Pythonのmatch
文とbreak
の使い方を理解し、適切に使用することで、より効率的なコードを書くことができます。