2009-09-21 24 views

答えて

18

任意のオブジェクトは、IFまたは一方 状態で以下のブール 演算のオペランドとして使用するために、真理 値について試験することができます。偽と見なされ 次の値:例えば任意の数値型の

  • ゼロ

    • なし、00L0.00j

    • 任意の空の配列、例えば、'',(),[]

    • 任意の空のマッピングです(例:{})。ユーザ定義クラスの

    • インスタンス、クラスがそのメソッドが整数ゼロまたはブール値を返しFalse__nonzero__()または__len__()方法を定義している場合。

    他のすべての値をtrue と考えられている - 多くの種類のオブジェクトは常に真であるようにします。 ブール演算結果を持つ演算と組み込み関数は、特に指定がない限り、falseの場合は0またはFalseを、trueの場合は1またはTrueを返します。 (重要な例外:ブール演算「または」と「と」は常にそのオペランドの1つを返します。)

  • https://docs.python.org/2/library/stdtypes.html#truth-value-testing

    そして前述のように、あなたはゼロ以外変更することで、カスタムオブジェクトを無効にすることができます。

    +5

    Python 3.0で__bool__をオーバーライドする必要があることに注意する必要があります。 – Casebash

    +7

    引用したドキュメントは不正確です。たとえば、セットはシーケンスでもマッピングでもなく、空の場合もfalseです。私はこれらの2つの行(セットの場合も含む)を「空の**コンテナ**」に崩壊させます。 –

    8

    更新に評価される方法をオーバーライドすることについての議論< 3.0 __nonzero__評価方法を変更するed。 Python 3.0では、これは__bool__Reference by e-satis)です。

    評価が意味することを理解することは重要です。 1つの意味は、オブジェクトが明示的にブールにキャストされているか、またはその位置によって暗黙的にキャストされている(ifまたはwhileループ内)場合です。

    もう1つは==評価です。 1 ==真、0 ==偽、それ以外は等しい==。

    >>> None==False 
    False 
    >>> 1==True 
    True 
    >>> 0==False 
    True 
    >>> 2==False 
    False 
    >>> 2==True 
    False 
    

    最後に、trueまたはfalseのみがそれ自身です。

    +0

    カスタムオブジェクトは、__nonzero__を実装することで真偽値評価に対してTrue/Falseを返すことができます。 – dcrosta