8

Python がブールステートメントを評価する方法について混乱しています。

たとえば。

False and 2 or 3

3 を返します

これはどのように評価されますか?Python は最初に「False and 2」を見て、「or 3」も見ずに False を返すと思いました。Python がここで見る順序は何ですか?

もう一つは:

1 or False and 2 or 2 and 0 or 0

1 を返します

最初の例から集めたものから、Python は左から右に評価すると思ったので、'1 or False' は 1 を返し、'1 and 2' は 2 を返し、'2 or 2' は最初の 2 を返します。の場合、'2 and 0' は 0 を返し、'0 or 0' は 2 番目の 0 を返します。

おわかりのように、私はここでかなり困惑しています。助けてください!

ありがとう!

4

5 に答える 5

10

andより優先度が高いor

False and 2 or 3

として評価される

((False and 2) or 3)

最初の部分(False and 2)はであるためFalse、Python は 2 番目の部分を評価して、条件全体が依然として成り立つかどうかを確認する必要がTrueあります。と3評価されるTrueため、このオペランドが返されます。

1 or False and 2 or 2 and 0 or 0が次のように評価される類似

(1 or ((False and 2) or ((2 and 0) or 0)))

1は に評価されるため、他のオペランドの値に関係なく、True条件全体は になります。TruePython はこの時点で評価を停止し、最終的な値を決定するオペランドを返します。

最終結果が決定されるとすぐに停止することは短絡評価と呼ばれ、次のように説明できます。

式の最終結果が決定されるたびに、評価が停止され、Python では最終値を決定するオペランドの値が返されます。つまり、左から右への評価を想定すると、次のようになります。

  • 演算子の場合、and評価される左端のオペランドFalse(または最後のオペランド)
  • 演算子の場合、or評価される左端のオペランドTrue(または最後のオペランド)
于 2012-05-06T22:42:36.290 に答える
3

ここでの問題は、評価には順序がありand、 より優先順位が高いことですor。そのため、ここでは左から右に評価されます。

これを考えると、これFalse and 2 or 3は python に、つまり に(False and 2) or 3評価されFalse or True、次に に評価されTrueます。

あなたの次の例では、Python が短絡しているため、は評価されたとおりに1 or False評価さTrue1、したがって が返されます1。残りは評価されません。orこれは、 an の一部が であるかのように理にかなっていTrueます。全体が である必要があることはわかっています。

これを確認する良い方法は、出力する関数を定義することです:

>>> def test(x):
...     print("Test: "+str(x))
...     return x
... 
>>> test(1) or test(0) or test(3)
Test: 1
1
>>> test(0) or test(0) or test(3)
Test: 0
Test: 0
Test: 3
3
>>> test(False) and test(2) or test(3)
Test: False
Test: 3
3
>>> test(1) or test(False) and test(2) or test(2) and test(0) or test(0)
Test: 1
1

これにより、何が評価され、どの順序で評価されるかを簡単に確認できます。

于 2012-05-06T22:42:04.177 に答える
3

このページのセクション 5.15 を確認してください: http://docs.python.org/reference/expressions.html

orは よりも優先順位が低いandため、ステートメントは次のように評価されます。

(false and 2) or 3
于 2012-05-06T22:42:55.567 に答える
2

これについては、しばらく前に python docs ページで読みました。見つけたら、参考にさせていただきます。それは、ブール文で、Python が最初の True オブジェクトを返すという行に沿って何かを述べました。したがって、and は事前に False で false にされていましたが、or には引数が 1 つしかなく、3 (True) でした。

于 2012-05-06T22:43:06.540 に答える
2

次のように評価されます。

result = (False and 2) or 3

したがって、基本的にFalse and 2true-ish の場合は返され、そうでない場合3は返されます。

于 2012-05-06T22:44:06.860 に答える