2016-10-12 14 views
2

私の環境は次のとおりです:ubuntu 16.04 & python 2.7.12。真実とブーリアンについて真と偽

私は、マニュアルを読み、その''()[]{}、そしてNoneはすべてデフォルトでFalseと考えられているのが分かりました。

しかし、私は、以下の実施例に何が起こっているか理解していない:

Python 2.7.12 (default, Jul 1 2016, 15:12:24) 
[GCC 5.4.0 20160609] on linux2 
Type "help", "copyright", "credits" or "license" for more information. 
>>> a='' 
>>> a==False 
False 
>>> a==True 
False 
>>> a=bool(a) 
>>> a==False 
True 
>>> 
>>> 
>>> 
>>> a="abcdefg" 
>>> a==True 
False 
>>> a==False 
False 
>>> a=bool(a) 
>>> a==True 
True 
>>> 

私は正しい結果を取得したいし、私がそうするbool()機能を使用する必要があります表示されます。 それが正しいのはなぜですか?

+1

すべてのことは、ブール変換が必要なときに例えば '[] 'が自動的に' False' *に変換されるということです。 '[]'と 'False'は異なるオブジェクトであるため、' [== False'は 'False'を返すので、' == 'ステートメントを評価するためにboolに変換する必要はありません。しかし、 'if []'は 'if False'に自動的に変換されます。 – Julien

+0

ブール値を変換した値がifなどに使用されていますが、オブジェクトは 'True'または' False'に評価された後でも(ブール値ではない)値を保持します。たとえば、 '[]と42'は' [] 'を返し、' FalseまたはNone'は 'None'を返します。これは、論理式の値がわかる前に評価された最後の式の値ではなく、 'True'または' False'を返すような論理式が存在するためです。 – BallpointBen

答えて

2

それは、これらの値はFalseに等しく、それはブール値のコンテキストで使用されたとき、彼らは偽としてを振る舞うことだということではありません。

絶対にTrueまたはFalseの値が必要な場合は、必ずboolにキャストするのが適切ですが、ほとんどの場合は必要ありません。

1

docsは言う:

任意のオブジェクトがある場合やwhileの条件での使用ために以下のブール演算のオペランドとして、真理値を試験することができます。言い換えれば

、これはa = ''のために動作します:

if a: 
    print "this won't print" 

しかしaはまだFalseに等しいではありません。

関連する問題