PythonでSwitchCase関数を実装する方法は? [2022]
公開: 2021-01-08目次
序章
これらの複雑なIf-elseステートメントをPythonで記述する代わりの方法があるかどうか疑問に思ったことはありませんか? 複数の「If」ステートメントでコードを乱雑にしたくない場合は、コードに制御フローを実装するためのよりクリーンで迅速な方法を提供するSwitchcaseステートメントの使用を検討する必要があります。 C ++、Java、Ruby、およびその他のプログラミング言語とは異なり、Pythonはswitch caseステートメントを提供しませんが、このステートメントを機能させるためのいくつかの回避策を提供します。
たとえば、Pythonを使用すると、他のプログラミング言語のPythonSwitchのcaseステートメントのように機能するコードスニペットを作成できます。 このブログの後半で、switch-caseステートメントを実装する方法について詳しく知ることができます。 Pythonについて詳しく知りたい場合は、データサイエンスコースをご覧ください。
PythonのSwitchステートメントとは何ですか?
一般に、スイッチは、変数に格納されている値をテストし、対応するcaseステートメントを実行する制御メカニズムです。 Switch caseステートメントは、プログラムに制御フローを導入し、コードが複数の「if」ステートメントによって乱雑にならないようにします。
したがって、コードは視聴者には細心の注意を払って透過的に見えます。 これは、プログラマーがコードに制御フローを実装するために使用する素晴らしいプログラミング機能です。 switch caseステートメントは、caseステートメントで指定された値をコード内の変数と比較することで機能します。
PythonSwitchのCaseステートメントを実装する方法
常にC++やJavaなどの言語でコーディングしている場合、Pythonにswitchcaseステートメントがないのは奇妙なことに気付くかもしれません。 代わりに、Pythonは、辞書、Pythonクラス、Pythonラムダ関数などの多数の回避策を提供してswitch-caseステートメントを実装します。
Pythonにswitchcaseステートメントがない正確な理由を知りたい場合は、PEP3103を確認する必要があります。
これらの選択肢を深く掘り下げる前に、まず、switchcase関数が他のプログラミング言語で通常どのように機能するかを見てみましょう。
以下の例では、Cプログラミング言語を使用しています
スイッチ(monthOfYear){ ケース1: printf(“%s”、1月); 壊す; ケース2: printf(“%s”、2月); 壊す; ケース3: printf(“%s”、3月); 壊す; ケース4: printf(“%s”、4月); 壊す; ケース5: printf(“%s”、5月); 壊す; ケース6: printf(“%s”、6月); 壊す; ケース7: printf(“%s”、7月); 壊す; ケース8: printf(“%s”、8月); 壊す; ケース9: printf(“%s”、9月); 壊す; ケース10: printf(“%s”、10月); 壊す; ケース11: printf(“%s”、11月); 壊す; ケース12: printf(“%s”、12月); 壊す; ディフォルト: printf( "不正な月"); 壊す; } |
ここで、 Pythonのswitch case関数の代替案についてさらに詳しく説明し、例を使用してこれらの代替案がどのように機能するかを理解しましょう。
読む: Pythonでのキャリアの機会:あなたが知る必要があるすべて
辞書マッピングの使用
他のプログラミング言語に精通している場合は、ディクショナリがキーと値のペアを使用してオブジェクトのグループをメモリに格納することを知っている必要があります。 switch-caseステートメントの代わりに辞書を使用している場合、キーと値のペアのキーはケースとして機能します。
次の例は、ディクショナリを使用したswitchcaseステートメントの実装を示しています。 ここでは、その年のどの月がどの月であるかを出力する関数month()を定義しています。
まず、caseステートメントを作成し、caseごとに個別の関数を記述します。 デフォルトのケースに対処する関数を作成するようにしてください。
def january(): 「1月」を返す def february(): 「2月」を返す def march(): 「3月」を返す def april(): 「4月」を返す def may(): 「5月」を返す def june(): 「6月」を返す def july(): 「7月」を返す def august(): 「8月」に戻る def september(): 「9月」を返す def october(): 「10月」を返す def november(): 「11月」を返す def december(): 「12月」を返す def default(): 「間違った月」を返す |
次に、Pythonで辞書オブジェクトを作成し、プログラムで定義したすべての関数を保存します。
スイッチャー={ 0:'1月'、 1:「2月」、 2:「3月」、 3:「4月」、 4:「5月」、 5:「6月」、 6:「7月」、 7:「8月」、 8:「9月」、 9:「10月」、 10:「11月」、 11:「12月」 } |
最後に、入力として整数を受け入れ、辞書ルックアップを実行し、対応する関数を呼び出すスイッチ関数をプログラムに作成します。
def month(monthOfYear): switcher.get(monthOfYear、default)()を返します |
完全なコードは次のようになります
def january(): 「1月」を返す def february(): 「2月」を返す def march(): 「3月」を返す def april(): 「4月」を返す def may(): 「5月」を返す def june(): ![]() 「6月」を返す def july(): 「7月」を返す def august(): 「8月」に戻る def september(): 「9月」を返す def october(): 「10月」を返す def november(): 「11月」を返す def december(): 「12月」を返す def default(): 「間違った月」を返す
スイッチャー={ 0:'1月'、 1:「2月」、 2:「3月」、 3:「4月」、 4:「5月」、 5:「6月」、 6:「7月」、 7:「8月」、 8:「9月」、 9:「10月」、 10:「11月」、 11:「12月」 } def month(monthOfYear): switcher.get(monthOfYear、default)()を返します print(switch(1)) print(switch(0)) |
上記のコードは次の出力を出力します
2月 一月 |
また読む:初心者のための42のエキサイティングなPythonプロジェクトのアイデアとトピック
Pythonクラスの使用
switch-caseステートメントを実装する代わりにPythonクラスを使用することもできます。 クラスは、プロパティとメソッドを持つオブジェクトコンストラクターです。 上記の同じ例を使用して、これをさらに理解しましょう。 ここでは、Pythonスイッチクラス内にswitchメソッドを定義します。
例
まず、Pythonのswitchクラス内にswitchメソッドを定義します。このメソッドは、1年の月を引数として取り、結果を文字列に変換します。
クラスPythonSwitch: def month(self、monthOf Year): デフォルト=「不正な月」 getattr(self、'case_' + str(monthOf Year)、lambda:default)()を返します |
注:上記の例では、キーワードlambdaとgetattr()メソッドの2つを使用しています。
- lambdaキーワードを使用して、Pythonで無名関数を定義します。 Lambdaキーワードは、ユーザーが無効な入力を入力するとデフォルトの関数を呼び出します。
- getattr()メソッドは、Pythonで関数を呼び出すために使用されます。
次に、ケースごとに個別の関数を作成します。
def january(self): 「1月」を返す
def february(self): 「2月」を返す def march(self): 「3月」を返す
def april(self): 「4月」を返す
def may(self): 「5月」を返す
def june(self): 「6月」を返す def july(self): 「7月」を返す
def august(self): 「8月」を返す
def september(self): 「9月」を返す def october(self): 「10月」を返す
def november(self): 「11月」を返す
def december(self): 「12月」を返す |
完全なコードは次のようになります
クラスPythonSwitch: def month(self、monthOf Year): デフォルト=「不正な月」 getattr(self、'case_' + str(monthOf Year)、lambda:default)()を返します def january(self): 「1月」を返す
def february(self): 「2月」を返す
def march(self): 「3月」を返す
def april(self): 「4月」を返す
def may(self): 「5月」を返す
def june(self): 「6月」を返す def july(self): 「7月」を返す
def august(self): 「8月」を返す
def september(self): 「9月」を返す def october(self): 「10月」を返す
def november(self): 「11月」を返す
def december(self): 「12月」を返す my_switch = PythonSwitch() 印刷(my_switch.month(1)) 印刷(my_switch.month(10)) |
上記のコードは次の出力を出力します
一月 10月 |
チェックアウト:インドのPython開発者給与
結論
このブログでは、switch-caseステートメント、switch-caseステートメントの代替方法、およびそれらの使用方法について学習しました。 上で説明したように、Pythonには組み込みのswitch case関数はありませんが、これらの代替手段をいつでも使用して、コードをすっきりときれいに見せ、パフォーマンスを向上させることができます。
データサイエンスについて知りたい場合は、IIIT-B&upGradのデータサイエンスのエグゼクティブPGプログラムをチェックしてください。これは、働く専門家向けに作成され、10以上のケーススタディとプロジェクト、実践的なハンズオンワークショップ、業界の専門家とのメンターシップを提供します。1業界のメンターとの1対1、400時間以上の学習、トップ企業との仕事の支援。
通常の辞書とPython辞書を区別します。
Pythonディクショナリまたは「Dict」は、順序付けられていない要素のコレクションを格納するために使用されるPythonの組み込みデータ構造です。 単一の値を格納する他のPythonデータ構造とは異なり、辞書データ構造は、すべてのキーが一意であるキーと値のペアを格納します。 キーと値のペアの挿入順序を記憶せず、キーを繰り返し処理します。 一方、Ordered DictionaryまたはOrderedDictは、キーと値のペアの挿入順序を追跡します。 また、二重にリンクされたリストの実装により、Pythonの通常の辞書よりも多くのメモリを消費します。 同じキーを削除して再挿入すると、OrderedDictが挿入順序を記憶しているため、元の位置に挿入されます。
名前付きタプルのどの操作が、スイッチケースに使用するのに便利なオプションになりますか?
Pythonのnamedtupleは、さまざまな操作を実行します。 以下は、namedtupleによって実行される最も一般的な操作の一部のリストです。 名前付きタプルの要素は、辞書とは異なり、インデックスからアクセスできます。 要素にアクセスする別の方法は、キー名を使用することです。 make()関数はnamedtupleを返します。 _asadict()関数は、マップされた値から構築された順序付きディクショナリを返します。 _replace()関数は、引数としてキー名を取り、それにマップされている値を変更します。 _fileds()関数は、指定されたnamedtupleのすべてのキー名を返します。
データを保存するためにリストを使用するのはいつですか?
Pythonリストは、次のシナリオでデータを格納するのに最適なデータ構造であると考えられています。リストは、さまざまなデータ型のさまざまな値を格納するために使用でき、それぞれのインデックスだけでアクセスできます。 要素に対して数学演算を実行する必要がある場合は、要素を直接数学演算できるため、リストを使用できます。 リストはサイズを変更できるため、保存する要素の数がわからない場合にデータを保存するために使用できます。 リスト要素は簡単に変更可能であり、セットやディクショナリとは異なり、重複する要素を格納することもできます。