web-dev-qa-db-ja.com

`False is False isFalse`が` True`と評価されるのはなぜですか?

なぜPythonでそれはこのように評価されます:

>>> False is False is False
True

しかし、括弧で試してみると、期待どおりに動作しています。

>>> (False is False) is False
False
42
pbaranski

a is b is cのような連鎖演算子はa is b and b is cと同等です。

したがって、最初の例はFalse is False and False is Falseであり、これはTrue and Trueに評価され、Trueに評価されます。

括弧を付けると、ある評価の結果が次の変数と比較されることになります(ご想像のとおり)。したがって、(a is b) is ca is bの結果をcと比較します。

66
zehnpaard

引用 Python公式ドキュメント

正式には、abc、...、yzが式であり、op1の場合、 op2、...、opNは比較演算子であり、a op1 b op2 c ... y opN za op1 b and b op2 c and ... y opN zと同等ですが、各式が最大で1回評価される点が異なります。

したがって、False is False is Falseは次のように評価されます。

(False is False) and (False is False)

2番目のFalse is False式は、元の式の2番目のFalseを使用します。これは、効果的に次のように変換されます。

True and True

そのため、最初の式はTrueであると評価されます。

ただし、2番目の式では、評価順序は次のようになります。

(False is False) is False

これは実際には

True is False

そのため、結果はFalseになります。

26
thefourtheye

あなたの表現

False is False is False

として扱われます

(False is False) and (False is False)

だからあなたは得る

True and True

そしてそれはTrueに評価されます。

この種の連鎖は、他の演算子でも使用できます。

1 < x < 10
14
Matthias

False is False is False 手段 (False is False) and (False is False)、 だが (False is False) is False 手段 :

>>> (False is False) is False
False
>>> a_true = (False is False)
>>> a_true
True
>>> a_true is False
False

だから、あなたは結果を得る。

5
lqhcpsgbl
>>> False is False is False
True

この場合、Falseペアのそれぞれが評価されます。最初の2つのFalseが評価され、それがTrueの場合、2番目と3番目のFalseが評価され、結果が返されます。

この場合、 False is False is Falseは、2つのコマンドの結果のandに相当しますFalse is False

0
dragon2fly