Pythonにswitch文はない?代わりとなる書き方を伝授!
2024.08.06更新
機電系エンジニア必見!!貴重なフリーランス案件はこちら ▶Pythonには、switch文がありません。switch文は複数の分岐を一度に記述できる構文です。今回はPythonで、switch文と同じ動きを実現するための方法について解説します。コードも紹介していますので、参考にしてみてください。
switch文とは
switch文の役割
switch構文は、プログラミングで使う構文の一つです。プログラムは「逐次」「分岐」「繰り返し」の3つの処理を組み合わせて、目的の動作になるように記述します。switch文は、この中の「分岐」処理で使う構文です。
条件分岐にはif文がよく使われますが、switch文もこのif文と使い方が似ています。条件分岐したい処理が3つ以上ある場合に、switch文がよく用いられます。プログラミング言語によって書き方の違いはありますが、3つ以上の分岐は一般的にswitchと記述されることが多いです。switch文を使った書き方について、簡単に説明します。
switch文を使ったプログラミング例
switch (式){
case 条件1: 処理1; break; case 条件2: 処理2; break; case 条件3: 処理3; break; default: 処理d; } |
式に対して、caseの後に続く条件が一致した時点の処理を実行します。例えば、式が条件2を満たす場合には処理2のみが実行されることとなります。
式がどの条件にも一致しない場合には、defaultで指定した処理が実行されます。defaultは例外処理のためによく用いられます。なお、break文を記述しないと、条件を満たした別の処理も実行されます。式はintやbool、文字列であるstring型にも対応しています。
switch文を使うメリット
switch文を用いることで、3つ以上の条件分岐が発生した場合に、スマートにプログラムを書くことができます。もちろん同様の処理はif文でも書くことができますが、分岐の数が多くなるとプログラムが見づらくなるため、switch文が用意されています。先ほどのswitch文の例をif文で記述してみます。
if文での条件分岐の例
if (式 == 条件1){
処理1 }else if (式 == 条件2){ 処理2 }else if (式 == 条件3){ 処理3 }else { 処理d } |
評価したい式と条件を項目別に記述しなければならず、簡潔な書き方はできません。さらに条件数が増えると、より読みづらいコードとなってしまいます。このような問題を解決するためにswitch文が用意されているプログラミング言語は多数あります。
Pythonにswitch文がないのはなぜ?
Pythonにはswitch文が存在しません。前述したとおり、switch文は簡潔に書くための機能であり、代わりの方法で実現できます。この章ではPythonにswitch文がなぜないのか、その理由について解説します。
Pythonに存在する別の方法で実現できる
Pythonはそもそもの記述法がシンプルなので、Pythonにもともと存在する機能だけでも、十分簡潔に3つ以上の条件分岐を記述できます。switch文を利用しなくても簡潔に書くことができるため、Pythonにはswitch文が準備されていないと考えてよいでしょう。
switch文実装のPython開発者の合意が得られていない
現実的な話をすると、Pythonにswitch文を実装してほしいと願うエンジニアは多くいます。実際にswitch文をPythonに実装してくれないか、という旨の嘆願書が提出されている例もあるようですが、Python開発者側は同意していません。
Python開発者の同意が得られないと、公式にPythonにswitch文を導入することはできませんが、同意していないことからPython開発者側は、switch文にそれほど重きを置いていないことがわかります。
Pythonでswitch文の代わりとなる書き方機能は?
Pythonにはswitch文がありませんが、代わりとなる書き方が存在します。Pythonは他の言語と比べてもシンプルに記述できるので負担になることは少ないはずです。この章ではPythonでswitch文の代わりとなる書き方を2つ紹介します。
方法①:if-else文で分岐する
Pythonでswitch文を実現する一つ目の方法は、if-elif-else文で条件分岐を行う方法です。if文で条件分岐を行うシンプルなやり方ですが、Pythonでは「else if」を「elif」と記述するため記述量を減らすことができます。
Pythonでのif-elif-else文を使った3つ以上の分岐の例
if 式 == 条件1: 処理1 elif 式 == 条件2: 処理2 elif 式 == 条件3: 処理3 else: 処理d |
Pythonは処理のかたまりをインデントで判断するため、カッコやセミコロンなどを使って区別する必要はありません。そのため、if文でもシンプルに書くことができます。また、intやboolのみならず、文字列であるstring型での比較ももちろんできます。switch文でcaseを使っていたところを、Pythonではelifで繋ぐイメージです。
Pythonのif文は式の比較に、>や<=などを用いることもできます。複数条件を指定したい場合には、andもしくはorで繋ぐことで実装が可能です。以下でこれらを使ったPythonのif文の例をご紹介します。
Pythonでのif文の例
weight == ○
if weight >= 20 and weight < 40: 処理A else: 処理B |
weightが20以上40未満の場合に、処理Aを実行するプログラムの例です。andは条件式を同時に満たすという意味で、orは条件式の最低でも一つを満たせば実行する処理になります。複数の条件式を組み合わせることで、処理する数値に幅を持たせることができます。
方法②:dictionary(辞書)型で記述する
Pythonにはdictionary(辞書)型という記述方法があります。これは指定したキーに一致すればその中の値を返す、リストのようなものです。キーの部分を一致する条件と見なすことで辞書型をswitch文のように使うことができます。以下のサンプルプログラムを見てみましょう。
Pythonのdictionary(辞書)型を使った条件分岐の例
dictionary = {key1:”〇”, key2:”△”, key3:”×”, key4:”□”}
ans = dict[key1] print(ans) |
Pythonのdictionary型では、キーとそれに対応する値を対で保存しておきます。キーを指定したときに、そのキーに対応する値が返ってくる仕組みです。条件分岐というよりも、直感的にキーに対応する値を返す処理を行なっており、キーがswitch文のcaseの条件式の役割となります。
上記の例では、dictに対してkey1を指定しています。つまり、変数ansにはkey1の値である◯が返ってくることになります。もちろん、dictionary(辞書)の中にキーと値を増やすことで条件分岐の選択肢を増やすことが可能です。caseやelifなどのような命令を記述しなくて済むため、簡単に書くことができます。
Pythonのdictionary(辞書)型を利用することで、「if-elif-else」構文を使うよりももっと簡潔に3つ以上の条件分岐を設定できますが、>や<=、論理演算子であるandやorを使った分岐を実装することはできません。
if-elif-else文とdictionary型はどちらがおすすめ?
Pythonでswitch文の代わりとなる書き方として、if-elif-else文を使った書き方、dictionary(辞書)型を使った書き方の2つを紹介しました。Pythonではどちらを使っても3つ以上の条件分岐を記述することができますが、一長一短ですので使い分けが必要です。
if-elif-else文を使った方法だと、Pythonでは少ない記述量で済みますが、dictionary(辞書)型よりは多く記述しなければなりません。しかし、幅を持たせた条件分岐や条件を複数設定できるなど、条件指定の面で有利です。
Pythonのdictionary(辞書)型を使ったswitch文の代用方法は、キーと値を:(コロン)で区切って指定するだけで簡単に実装できます。しかし、キーに完全一致させる必要があるため、幅を持たせた条件の指定はできません。さらに、論理演算子を使った複数の条件に対応させることも簡単にはできません。文字列を比較するのには使いやすいでしょう。
結論として、Pythonでswitch文を実装するには、if-elif-else文とdictionary型をシーンに合わせて取り入れるべきです。両者を使い分けることで、読みやすいうえより素早くPythonのプログラムを書くことが可能になります。
Pythonにswitch文はないが2つの方法で実装できる!
今回はPythonにswitch文がなぜないのか、どのようにして代用するのかについて解説してきました。
Pythonでswitch文を実装するためにはif文を使った方法とdictionary(辞書)型を使う方法があり、互いにメリットデメリットがあります。Pythonでswitch文を実装する場合には、使用するシーンに合わせて選択しましょう。
フリーランス×機電系エンジニア!高単価求人はこちら ▶機電系求人はこちら
-
設計技術者(樹脂、金属部品)
-
- 単価
-
40~50万円
-
- 職種
- 機械設計
-
詳細を見る
-
-
FPGAの設計開発:電気電子設計
-
- 単価
-
70~80万円
-
- 職種
- 電気電子設計
- スキル
- ・FPGA論理設計、RTLコーディング、論理検証環境構築、論理検証・RTLコード:VHDL・論理検証ツール:Siemens製Questa/ModelSIM
- 地域
- 東京
- ポイント
- #高単価
-
詳細を見る
-
-
UI画面の設計業務:電気電子設計
-
- 単価
-
64〜万円
-
- 職種
- 開発
- 電気電子設計
- スキル
- 必要スキル: ・電源回路は複数回経験し、設計動作確認など、一人でもある程度やるべきことが分かる。 ・数十頁のデータシートを読み、要求仕様(タイミング/電圧など)が理解できる ・その他左記の回路の種類の中で、回路設計の実務経験が1回以上ある。 ・回路修正ができる(半田付け、ジャンパー処理)
- 地域
- 関西
- ポイント
- #業務委託#駅近
-
詳細を見る
-
-
【急募】工作機械メーカーにおける自社製品の制御設計
-
- 単価
-
40~50万円
-
- 職種
- 電気電子設計
- スキル
- 基本的なPCスキル産業用機械・装置の電気設計経験
- 地域
- 山梨県
- ポイント
- #業務委託
-
詳細を見る
-