2016-10-21 7 views
9

私はPython 3.5.2シェルを使用しています。私はなぜこれがなぜ機能するのか混乱していますか?操作の順序が間違っていますか?

5 > 5**2 
False 
5 > 5**2 == False 
False 
(5 > 5**2) == False 
True 

操作の順序は、**が前に実行されることを定義しています。これは==の前にあるため動作するはずです。

答えて

11

興味深い質問!この動作の理由は、Pythonのすべての比較演算子が等しい優先順位を持ち、can be chainedであるためです。

だからあなたの第2の比較はもちろんFalseと評価さ

5 > 25 and 25 == False

に相当します。 しかし、私はこの場合、非常に直感的ではないことに同意します。

+0

あなたは、常にこのチェーンをオーバーライドするために括弧を使用することができます:真 '(> 5 ** 2)== false'を=>' true'を – brianpck

+0

@brianpckが、なぜあなたはそれをしたいですか?比較は常に(非常に非正称の方法でオーバーロードされない限り)ブール値を生成し、ブール値を例えばと比較する。真実か偽かは、最初は悪い習慣です。 '(5> 5 ** 2)== False'の代わりに' not(5> 5 ** 2) 'や' 5 <= 5 ** 2'を実行してください。 –

+0

@tobias_k、しかし、 OP(私は願っています!)は実際の問題解決ではなく実験でした。私は言語の機能を扱うために*もっと*奇妙なコードを書いてきました。 – brianpck

0

5.15。演算子の優先順位

次の表は、最も低い優先順位(最小のバインディング)から最も高い優先順位(ほとんどのバインディング)まで、Pythonの演算子の優先順位をまとめたものです。同じボックス内の演算子は同じ優先順位を持ちます。構文が明示的に与えられていない限り、演算子はバイナリです。同じボックスグループ内の演算子は、左から右へ同じ優先順位とチェーンを持つ比較を除き、比較を除いてすべて同じです。参照:比較と累乗。右から左へグループ)。

5 Expressions - Python

関連する問題