2016-10-27 6 views
0

>>> if '' is not None: ... print'23333' ... 23333 私は(Noneではない)はTrueで、( '')はFalseだから、なぜそれが印刷されているのでしょうか?オブジェクトのアイデンティティのためのなぜこれがPythonでTrueを返すか

+0

''''が 'None'と同じオブジェクトでないかどうかをチェックしていますが、それらは同じオブジェクトではないので、チェックがTrueを返すので条件が発生します。 –

+0

'is not'は実行中の完全な演算子です。 'if ''が(Noneではありません)'を実行してみてください。 –

答えて

4

isis notテスト''Noneは、彼らがされていない、同じオブジェクトなので、テストは、あなたのケースでTrueを返す場合、すなわち、テストします。 the Python documentationから

オペレータis及びオブジェクトIDのis not試験:x is y が真である場合にはxとyが同じオブジェクトである場合にのみ。 x is not yは、 逆の真理値を生成します。

''Noneが同じ"truthiness"を有するが、別の言い方をすると、それはどちらもあなたがbool(None)bool('')をすれば、彼らは同じオブジェクトを参照しないためにFalseに評価されています。

+0

心から感謝します。 – admin

+0

@dscdtc問題はありません。これは最初は混乱する可能性があります。 – elethan

2

is notは、否定がisに等しい単一の演算子です。 '' is Noneはfalseであるため、'' is not Noneがtrueです。

isのテストのIDでは、等しくないので、'' is (not None)はまだあなたが望むことをしません。

+0

心から感謝、私はそれを得た – admin

関連する問題