この記事では、Pythonでswitch文を代用する方法を紹介します。
実はPythonには、switch文がありません。なので、switch文のような処理をしたい場合にはPythonに用意されているもの(機能)で工夫して代用するしかありません。
それでは、Pythonでswitch文を代用する方法を見ていきましょう!
Python 3.10からswitch
文のように処理を分岐させれる構造パターンマッチングが追加されました。詳しくは以下の記事を参照してください。
switch
文とは、条件分岐をするための制御構文の1つです。
例として他の言語のswitch
文の定義を見てみましょう。以下のコードは C#のswitch
文の定義ですが、どの言語も大体こんな感じで定義されます。
switch(変数)
{
case 値1:
//変数の値 == 値1の時に実行される
なんらかの処理
break;
case 値2:
//変数の値 == 値2の時に実行される
なんらかの処理
break;
・
・
・
default:
//変数の値がどの値とも異なる時に実行される
なんらかの処理
break;
}
このように、switch
文を使うことで見やすく条件分岐を書くことができ、多分岐の場合には、if
文よりも早く処理をすることができました。
しかし、Pythonには用意されていないので他の構文で代用するしかありません。
そもそもなぜPythonにはswitch
文が用意されていないのでしょうか...?
Pythonにswitch
文が実装されていない理由として公式ドキュメントには以下のように記載されています。
if... elif... elif... else の繰り返しで簡単に同じことができます。switch 文の構文に関する提案がいくつかありましたが、範囲判定をするべきか、あるいはどのようにするべきかについての合意は (まだ) 得られていません。
Python に switch や case 文がないのはなぜですか? - デザインと歴史 FAQ — Python 3.9.1 ドキュメント
つまりはいろいろ案はあったけど、とりあえず他の構文で代用できるので今のところは必要ないってことですね。
もちろん、将来的に追加される可能性は十分にあります。
それでは、他の構文を使ってswitch
文を代用する方法を見ていきましょう!
公式ドキュメントに記述されていたようにif… elif… elif… else
を使うことでswitch
文のように扱うことができます。
v = 2
if v == 1:
print(1)
elif v == 2 or v == 3:
print('2 or 3')
elif v == 4:
print(4)
else:
print('default')
実行結果
2 or 3
if
文の詳しい使い方は以下の記事を参考にしてください。
or
などを使って条件を複数定義したせいで見た目がスッキリしない場合は、in
演算子とset
を使うことで見やすく条件をまとめることができます。
v = 2
if v == 1:
print(1)
elif v in {2, 3}: # in演算子とsetで条件をまとめる
print('2 or 3')
elif v == 4:
print(4)
else:
print('default')
実行結果
2 or 3
辞書を使うことでもswitch
文を代用できます。
v = 2
d = {1: 'one', 2: 'two', 3: 'three'}
# dのkeyにvがあるかどうか
if v in d:
r = d[v]
else:
r = 'デフォルト'
print(r)
実行結果
two
分岐時に関数を処理したいなら辞書のvalue
に関数の参照を渡しておけば可能です。
def a():
print('a関数')
def b():
print('b関数')
# 関数a,bの参照を渡しておく
d = {1: a, 2: b}
v = 1
if v in d:
d[v]() # 実行
else:
print('デフォルト')
実行結果
a関数
可変長引数を使うことで引数が異なる関数も同じように呼び出すことができます。
# 可変長引数を定義
def a(*args, **keywords):
print('a関数')
def b(*args, **keywords):
print(f'b関数: {args[0]}')
d = {1: a, 2: b}
v = 2
if v in d:
d[v](v)
else:
print('デフォルト')
実行結果
b関数: 2
このように、状況に合わせて工夫することでswitch
文が無くとも実装したい処理を実現することができます。
この記事では、Pythonでswitch文を代用する方法を解説しました。
この他にも工夫の仕方によって色々な代用方法があると思いますが、あまり奇抜なやり方は可読性を著しく下げる恐れがあるのでやめておいた方が無難です。
switch文のメリットはやはり可読性にあります。代用で分かりにくいコードを使っていたら本末転倒なので気をつけましょう!
それでは今回の内容はここまでです。ではまたどこかで〜( ・∀・)ノ
View Comments