5

==まず、は 2 つの式を比較するために使用され、一方=は変数に値を代入するために使用されることを理解していることに注意してください。ただし、python は構文要件が最小限の非常にクリーンな言語であるため、これは簡単に実行できる演算子のように思えます。また、私は討論や議論を始めようとしているのではなく、プログラミングの知識を向上させるために欠けているものがあるかどうかを学びます.

(Python で) 変数を int や文字列として宣言する必要がなく、割り当てられた値に基づいて言語がこれを決定するのと同じように、なぜ 'if' ステートメントは単純に=が aであると判断しないのですか?割り当てではなく比較?

もう 1 つの例は、Python が他の言語の多くの {} と [] を取り除き、単純にインデントを使用したことです。これは、インデントと波括弧の使用が冗長であるためです。それif foo == goo:も冗長に思えます。でも、まだ気づいていないことがあるのか​​もしれません。したがって、質問です!

4

2 に答える 2

11

非常に単純な理由の 1 つは、python がブール式を許可していることです。

a = b == c

また、複数の割り当て:

a = b = c

最初のケースでは、とが等しいかどうかに応じてa、ブール値* (Trueまたは) が割り当てられます。2 番目のケースでは、同じオブジェクト ( ) を参照することになります。明らかに、1 つのオペレーターだけで両方をサポートすることはできません。Falsebcabc

=(原則として)ステートメント内でのみオーバーロードできると思いますが(そこでは割り当てが許可されていないため)、それは混乱を招くでしょう-特にステートメントで割り当て許可されている場所ifから来た人にとっては 禅が再び勝つ (「明示的は暗黙的よりも優れている」)。Cif


  • 実際にはブール値である必要はありません。実際にはa__eq__メソッド (または、前者が を返す場合は)によって返されるものは何でもですbほとんどのオブジェクトはブール値を返しますが、そうでないオブジェクトもいくつかあります (たとえば、別の を返すを持つ一般的なオブジェクトの 1 つです)。__eq__NotImplementednumpy.ndarray__eq__ndarray
于 2013-04-03T02:46:33.803 に答える
5

2 つの演算子はオーバーラップできます。たとえば、

a = b = c

abの両方をに設定しc、 と

a = b == c

とが等しいかどうかに基づいて、またはaのいずれかに設定されます。TrueFalsebc


より一般的には、Python はパーサーをより単純にするために、あいまいな可能性さえある構文を回避しようとします。上記のあいまいさが解決できたとしても、多くの特殊なケースが追加され、一般的にパーサーが複雑になります。2 つの演算子を適切に分離することで、この問題を回避できます。

于 2013-04-03T02:47:08.207 に答える