【Python】switch文が無いので何かで代用しよう!

Python

この記事では、Pythonでswitch文を代用する方法を紹介します。

様々なプログラム言語で条件分岐として使用されているswitch文が、Pythonには存在しません。なので、switch文のような処理をしたい場合には、Pythonにあるもので工夫して代用するしかありません。

ここでは、その代用方法をいくつか紹介します。

switch文とは?

switch文とは、条件分岐の1つで様々な言語で使われています。

以下は「C#」でのswitch文の定義方法ですが、どの言語も大体こんな感じで定義されます。

switch(変数)
{
    case 値1:
        変数の値 == 値1の時に実行される
        break; 
    case 値2:
        変数の値 == 値2の時に実行される
        break; 
          ・
          ・
          ・ 
    default:
        変数の値がどの値とも異なる時に実行される
        break; 
}

このように他の言語では、switch文を使うことで見やすく条件分岐を書くことができ、多分岐の場合にはif文よりも早く処理をすることができました。

しかし、Pythonでは残念ながら使えないので、何か他の構文で代用するしかありません。それでは、Pythonでswitch文の代用方法を見ていきましょう!

if文でswitch文を代用する

以下のようにif文を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')

if文の詳しい使い方は、下の記事を参考にしてください。

【Python】条件分岐する方法【if文の使い方】【Python】条件分岐する方法【if文の使い方】

条件をまとめる

条件を複数定義して記述がスッキリしない場合は、in演算子と配列を使うことで見やすく条件をまとめることができます。

v = 2

if v == 1:
    print(1)
elif v in (2, 3):     # in演算子とタプルで条件をまとめる
    print('2 or 3')
elif v == 4:
    print(4)
else:
    print('default')

辞書でswitch文を代用する

辞書を使うことでも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):
    print('a関数')

def b(*args):
    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文のメリットはやはり可読性にあります。代用で分かりにくいコードを使っていたら本末転倒なので気をつけましょう!

タイトルとURLをコピーしました