【Python】switch文は存在しない!代わりの書き方を解説!
(*このページは2021年2月1日に更新されました。)
皆さんはswitch文を使ったことがありますか?
JavaやCなどの言語を使用した経験がある方は当然知っていると思いますが、経験がPythonのみの方は使ったことがないかと思います。
switch文()とは条件分岐を行う構文であり、if文と比べて条件が多い場合に適応した構文になります。
つまり、if文をたくさん書かなくてもこの構文ひとつだけで対応が可能になります。
そんな便利なswitch文ですが、Pythonには準備されておらず、使用することができません。
しかし、if文を上手に使用すると、switch文のような多条件の処理を実現することができます。
今回はPythonでswitch文の代わりとなる書き方について以下の内容で解説していきます。
⚫︎ switch文()とは
⚫︎ if-elif-else文を使用する
⚫︎ イテレータを使用する
目次
switch文とは
Python以外の言語を扱ったことがある方は知っているかと思いますが、switch文()とは条件分岐を行う構文であり、if文と比べて条件が多い場合に適応した構文になります。
例えば、信号でそれぞれの色によって処理を変えたい場合に、switch文を使用するとif文よりわかりやすい条件処理を記述することができます。
例(Java)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
public class Main { public static void main(String[] args) throws Exception { String color = "blue"; switch (color){ case "red": System.out.println("赤色になりました。"); break; case "yellow": System.out.println("黄色になりました。"); break; case "blue": System.out.println("青色になりました。"); break; default: System.out.println("エラーです。"); } } } |
出力結果
青色になりました。
このように、条件の値が「red」である場合は「赤色になりました。」という文字列を表示し、「yellow」である場合は「黄色になりました。」という文字列を表示し、「blue」である場合は「青色になりました。」という文字列を表示し、それ以外は「エラーです。」という文字列を表示するというようなコードを分かりやすく記述することができます。
これはif文でも実現はできますが、else-ifをたくさん記述しなければなりません。
それに比べてswitch文はcaseを追加するだけで良いので多条件の場合にはとても便利な文法になります。
しかし、この文法はPythonでは準備されていないため使用することができません。
なぜPythonにswitch文がないのか?
先ほども言いましたが、Pythonではこの文法は準備されていないため使用することができません。
なぜなら、Pythonのif文で簡単に同じことができるからです。
公式のドキュメントでは以下のように記述しています。
if… elif… elif… else の繰り返しで簡単に同じことができます。
switch 文の構文に関する提案がいくつかありましたが、範囲判定をするべきか、あるいはどのようにするべきかについての合意は (まだ) 得られていません。
引用:Python に switch や case 文がないのはなぜですか?
switch文の代わりとなる書き方
Pythonでswitch文の代わりとなる書き方を紹介します。
if-elif-else文を使用する場合
これは、先ほどでも説明されていましたが、if-elif-else文を使用することでswitch文の代わりとして書くことができます。
例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
print('if-elif-else文でswitch文を実現') def traffic(color): if color == 'red': print('赤色になりました。車は止まってください。') elif color == 'yellow': print('黄色になりました。もうすぐ赤になりますので注意してください。') elif color == 'blue': print('青色になりました。車は進んでください。') else: print('エラーです。') print('・引数がblueの場合') traffic('blue') print('・引数がyellowの場合') traffic('yellow') print('・引数がredの場合') traffic('red') print('・引数がorangeの場合') traffic('orange') |
出力結果
if-elif-else文でswitch文を実現
・引数がblueの場合
青色になりました。車は進んでください。
・引数がyellowの場合
黄色になりました。もうすぐ赤になりますので注意してください。
・引数がredの場合
赤色になりました。車は止まってください。
・引数がorangeの場合
エラーです。
if-elif-else文でswitch文を実現しています。
また、インデントも同じに設定できるのでswitch文と同じように分かりやすく記述することができます。
イテレータを使用する場合
また、リストやタプルのようなイテレータを使用することでswitch文のような処理を実現することができます。
例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
print('イテレータを使ってswitch文を実現') color_list = ['red', 'yellow', 'blue', 'purple'] for i in color_list: if i == 'red': print('・要素がredの場合') print('赤色になりました。車は止まってください。') if i == 'yellow': print('・要素がyellowの場合') print('黄色になりました。もうすぐ赤になりますので注意してください。') if i == 'blue': print('・要素がblueの場合') print('青色になりました。車は進んでください。') if i != 'red' and i != 'yellow' and i != 'blue': print('・要素がred、yellow、blue以外の場合') print('エラーです。') |
出力結果
イテレータを使ってswitch文を実現
・要素がredの場合
赤色になりました。車は止まってください。
・要素がyellowの場合
黄色になりました。もうすぐ赤になりますので注意してください。
・要素がblueの場合
青色になりました。車は進んでください。
・要素がred、yellow、blue以外の場合
エラーです。
イテレータにfor文を使って要素を取り出し、取り出した要素に対して当てはまる条件処理を記載することでswitch文と同じように記述することができます。
こちらの書き方は取り出した要素に対して条件処理を行いたい場合に使用するかもしれませんが、普段の条件分岐として使用する場合はあまりお勧めしません。
今回のポイント
Pythonにswitch文は存在しない
Pythonでswitch文を使用したいなら、if-elif-else文を使用する。
⚫︎ Pythonでは多条件の処理に便利なswitch文は準備されていない
(if文で簡単に同じことができるから)
⚫︎ if-elif-else文を使用するとswitch文を実現することができる
(インデントも揃えることができるのでswitch文と同じように見やすい)
⚫︎ リストやタプルのようなイテレータを使用することでもswitch文のような処理を実現することができる
(余りおすすめしない)
ST
株式会社flyhawkのSTです。フライテックメディア事業部でのメディア運営・ライター業務なども担当。愛機はMac Book AirとThinkPad。好きな言語:swift、JS系(Node.js等)。好きなサーバー:AWS。受託開発やプログラミングスクールの運営をしております。ご気軽にお問い合わせください。