はじめに
Python3.10
から match文
が搭載されました。
match文
は 従来のif文
と異なり条件式に対応できないという、落とし穴があるのと、
if文と同じように、for文と組み合わせて使うことが多いと思ったので、そこら辺を記載しようかなと思います。
※注記※
正規表現にもmatch関数というものがあるので、混在しないように気をつけてください。完全に別物です。
正規表現のmatch関数については以下の記事を参考にしてみてくださいね。
動作確認環境
OS: mac OS Monterey 12.1 (M1 Mac)
環境: miniforge (conda環境)
Python: 3.10.1
エディタ: Visual Studio Code
※注記※
必ず、Python 3.10.0以上で実行してください。
環境構築
まずは環境構築から、condaでPython3.10.1の環境を作ります。
ターミナルを開いて
# condaでPython3.10.1の環境構築
conda create -n python310 python==3.10.1
conda activate python310
# Python 3.10.1であることを確認
python -V
# デスクトップに作業フォルダと空のpythonファイルを作成
cd ~/Desktop
mkdir match_test
cd match_test
touch if.py
touch match.py
touch match_error.py
デスクトップに
match_test
というフォルダーが作成されているので、Visual Studio Codeで開きます。
if.py, match.py, match_error.py
がフォルダーに格納されているので、これらを編集して、実行し動作を確認していきます。
if.py
まずは従来の if文
を使った処理を書いてみます。
この if文
の内容を match文
で後ほど書いてみることとします。
list = [1, 2, 3, 4, 5, 6, 8, 10, 11, 13, 15, 17, 19, 20, 22, 23]
list_mult2 = []
list_mult3 = []
list_others = []
for i in list:
if i % 2 == 0:
list_mult2.append(i)
elif i % 3 == 0:
list_mult3.append(i)
else:
list_others.append(i)
print(list_mult2)
print(list_mult3)
print(list_others)
# 実行結果
[2, 4, 6, 8, 10, 20, 22]
[3, 15]
[1, 5, 11, 13, 17, 19, 23]
リスト、for文、if文
を使っています。
実行すると、2の倍数が表示されて、2の倍数を除いた3の倍数が表示されて、それ以外の数字が表示されます。
3の倍数をすべて表示したい場合は、すこし複雑な処理になるので、ここでは割愛させてください。
match_error.py
上記の if文
処理を match文
で記載しています。
list = [1, 2, 3, 4, 5, 6, 8, 10, 11, 13, 15, 17, 19, 20, 22, 23]
list_mult2 = []
list_mult3 = []
list_others = []
for i in list:
match i:
case i % 2 == 0:
list_mult2.append(i)
case i % 3 == 0:
list_mult3.append(i)
case _:
list_others.append(i)
print(list_mult2)
print(list_mult3)
print(list_others)
# 実行結果
case i % 2 == 0:
^
SyntaxError: expected ':'
エラーが表示されれば成功です。
これがif文
と異なる、match文
の落とし穴です。
case
のパターンには、演算処理を入れることはできません。
例えば、i + 1
といった処理でも入れることはできません。
詳しくは以下のリンクを確認してください。
match.py
先程エラーになってしまったので、ちゃんと出力できるコードにします。
case
のパターンで演算処理を含む条件式を入れるには、if文
を使います。
list = [1, 2, 3, 4, 5, 6, 8, 10, 11, 13, 15, 17, 19, 20, 22, 23]
list_mult2 = []
list_mult3 = []
list_others = []
for i in list:
match i:
case i if i % 2 ==0:
list_mult2.append(i)
case i if i % 3 ==0:
list_mult3.append(i)
case _:
list_others.append(i)
print(list_mult2)
print(list_mult3)
print(list_others)
# 実行結果
[2, 4, 6, 8, 10, 20, 22]
[3, 15]
[1, 5, 11, 13, 17, 19, 23]
正しく表示することができましたね。
case
でif文
を取り入れることで、match文
でも条件処理ができました。
結局if文
を使っているので、わざわざmatch文
を使う必要はなく、if文
の処理で十分だとは思います。
match文のメリット
match文
は True/False
のように、〇〇の値が0の場合、1の場合といった条件分岐に非常に強いと思います。
if文でもこの処理はできますが、match文のほうが見やすく解読しやすい
と思いますね。
さいごに
簡単な match文
の紹介でした。
match文
は導入されたばかりで、今後アップデートで条件式が使えるようになったりとか、処理が変化していくかもしれません。
Python
のバージョンアップが合った場合には、都度動作を確認してみてくださいね。