はじめに
Pythonにはswitch文は存在しません,if-elif-else文を使って同じことができるという理由から、switch文は採用していないとのことです。
今回はif-elif-elseではなく、dict
の特性を活かしてswitch文を完全再現してみよう。
switch文は何できるでしょう
お馴染みのPHPでswitch文の参考例をみてみよう
switch.php
<?php
switch ($変数) {
case $変数の値が0の場合:
echo "$変数が0に等しい";
...
break;
case $変数の値が1の場合:
echo "$変数は1に等しい";
...
break;
case $変数の値が2の場合:
echo "$変数は2に等しい";
...
break;
default:
echo "$変数の結果がどの値とも一致しなかった";
...
}
?>
とてもわかりやすい分岐処理です
- 変数の値によって実行するコードブロックが違う
- 通常ブロックのコードは一行で終わるのが読みやすいですが、実際長々と書くことも可能ですので、そこも後でちゃんと再現する
- 変数の値がどれにも当てはまらない時にdefaultのブロックが実行されます
Pythonのdictでswitch文を再現
switch.py
# 変数を定義
day = 6
# dickのvalueとして使用する関数を定義
def get_sunday():
return "Sunday"
def get_monday():
return "Monday"
def get_tuesday():
return "Tuesday"
def get_unknown():
return "get_unknown"
# dickを定義
switcher = {
# dickのvalueに関数を渡しておく
0: get_sunday,
1: get_monday,
2: get_tuesday
}
# 直接変数dayを渡すと、key存在しない場合エラーが返ってきます
# keyが存在しない場合もあるため
# 返り値指定可能のget()を使用 、パラメータにも関数渡しておこう
day_name = switcher.get(day, get_unknown)()
print(day_name)
# 出力結果
get_unknown
switch文の機能完全再現、ブロックの操作が独立したことで、codeもある程度わかりやすい。
Readability counts.
読みやすいことは善である。 --pythonの禅