2017-10-12 1 views
6

私はPythonの初心者です。 pythonにswitch-caseがない理由を説明してください。Pythonにswitch-caseがないのはなぜですか?

はそんなに

+2

と一致しない場合は、デフォルトを返します。 'if ... elif'を' switch'よりもスティックする方が安全です。あなたが慎重でないと、彼らは恐ろしいバグにつながります。 – Unni

+0

回避策として、[Pythonのスイッチ/ケース実装に何か価値がありますか?](https://stackoverflow.com/q/5440990/6521116) –

答えて

18

をいただき、ありがとうございます私たちは、一点でそれを考えられているが、名前付き定数を宣言する方法を持たずに、効率的なジャンプテーブルを生成する方法はありません。だから私たちが残すことになるのは、if-elif-elif-elseチェーンですでにできることのための構文的砂糖です。

詳しくは、PEP 275およびPEP 3103を参照してください。

大まかに言えば、いろいろな提案が、スイッチのケースについて人々の見解に追いつかず、既存のソリューション(辞書ベースのディスパッチ、if-elifチェーン、getattr-同じメソッドの実装が異なるオブジェクトへの古典的なポリモーフィズムのディスパッチなど)を使用します。

+2

'case 1:'はかなり一定ですが、 *名前付き定数を使用すると、どこでもマジックナンバーを使用する必要があり、マジックナンバーを奨励するシンタックス構造は望ましくありません。 – user2357112

3

これに答えるために、ドキュメントには文字通りセクションがあります。以下を参照してください:

Why isn’t there a switch or case statement in Python?

TL; DR:既存の選択肢(getattrまたはdict.get経由で動的ディスパッチ、if/elifチェーンは)うまくすべてのユースケースをカバーしています。私はif文連鎖で行わ同じ仕事を得ることができるよう

0

はにもかかわらずJavaは、C++は、C#サポートの彼らは、私がswitch statementsを使用したことがありません。

+2

質問に答えることはできません... – qwr

+0

質問1:1に答えていないにもかかわらず、それは古くなっているかどうかを推測するための指標として使用できます。あなたは 'switch 'ステートメントを探していたところで、この事件を経験したことがありますか? – user1767754

+0

パフォーマンス上の問題(noob)は必要ありません:( –

1
def f(x): 
    return { 
     1 : 'output for case 1', 
     2 : 'output for case 2', 
     3 : 'output for case 3' 
    }.get(x, 'default case') 

あなたはpythonでスイッチケースとしてこれを使用することができますし、条件が一致しない場合の条件は彼らは非常に有用ではありません

関連する問題