私はPython 3.5.2シェルを使用しています。私はなぜこれがなぜ機能するのか混乱していますか?操作の順序が間違っていますか?
5 > 5**2
False
5 > 5**2 == False
False
(5 > 5**2) == False
True
操作の順序は、**が前に実行されることを定義しています。これは==の前にあるため動作するはずです。
私はPython 3.5.2シェルを使用しています。私はなぜこれがなぜ機能するのか混乱していますか?操作の順序が間違っていますか?
5 > 5**2
False
5 > 5**2 == False
False
(5 > 5**2) == False
True
操作の順序は、**が前に実行されることを定義しています。これは==の前にあるため動作するはずです。
興味深い質問!この動作の理由は、Pythonのすべての比較演算子が等しい優先順位を持ち、can be chainedであるためです。
だからあなたの第2の比較はもちろんFalse
と評価さ
5 > 25 and 25 == False
に相当します。 しかし、私はこの場合、非常に直感的ではないことに同意します。
5.15。演算子の優先順位
次の表は、最も低い優先順位(最小のバインディング)から最も高い優先順位(ほとんどのバインディング)まで、Pythonの演算子の優先順位をまとめたものです。同じボックス内の演算子は同じ優先順位を持ちます。構文が明示的に与えられていない限り、演算子はバイナリです。同じボックスグループ内の演算子は、左から右へ同じ優先順位とチェーンを持つ比較を除き、比較を除いてすべて同じです。参照:比較と累乗。右から左へグループ)。
あなたは、常にこのチェーンをオーバーライドするために括弧を使用することができます:真 '(> 5 ** 2)== false'を=>' true'を – brianpck
@brianpckが、なぜあなたはそれをしたいですか?比較は常に(非常に非正称の方法でオーバーロードされない限り)ブール値を生成し、ブール値を例えばと比較する。真実か偽かは、最初は悪い習慣です。 '(5> 5 ** 2)== False'の代わりに' not(5> 5 ** 2) 'や' 5 <= 5 ** 2'を実行してください。 –
@tobias_k、しかし、 OP(私は願っています!)は実際の問題解決ではなく実験でした。私は言語の機能を扱うために*もっと*奇妙なコードを書いてきました。 – brianpck