if x:
は、完全にブール値の真偽値testと同等です。 if
statement documentationから
:
それは
(真と偽の定義のためのセクション
Boolean operationsを参照してください)正確に一つが真であることが判明するまで表現一つ一つを評価することにより、スイートのいずれかを選択
ここで、Boolean operations sectionはどのように真実が定義されていますか。 bool()
functionは、まったく同じ規則に従います。
ブール値、つまり真または偽のいずれかを返します。 xは、標準の真理試験手順を使用して変換されます。
標準的なタイプのドキュメントは、Truth Value Testing sectionを有する:
任意のオブジェクトは、if
又はwhile
状態で使用するための以下のブール演算のオペランドとして、真理値について試験することができます。
not
は、同じ真理値を単純に反転します。したがって、上記の規則によってx
が真と見なされる場合、not x
はFalse
を返し、それ以外の場合はTrue
を返します。
ように注意してください:グローバルを設定することにより、マスクされすることができ、組み込みの名前False
とTrue
、Pythonの2に:
>>> True = False
>>> True
False
ので、is
アイデンティティのテストとしてその再割り当てによってだまされますよくPython 3は、False
とTrue
というキーワードになります。
あなたのユーティリティ関数は、bool(x) is True
またはbool(x) is False
を使用する必要はありません。必要なのは、bool(x)
とnot bool(x)
です。これらは、がすでにで、True
とFalse
というオブジェクトを生成しています。 bool()
とnot
は何も返すことができません。is True
またはis False
を使用すると非常に冗長です。
最後に、テストホイールを再発明しないようにしてください。Python標準ライブラリにはunittest
ライブラリが付属しています。 assertTrue
とassertFalse
の両方の機能を持ち、implementation of these functionsはif
とif not
の両方を使用しています。
注意してください。 'xが真であれば'は 'bool(x)が真であれば'と同じではない。 –
@JohnKugelmanそれを拡張するケア?いつ彼らは同等ではないでしょうか? – RedX
'x = True'は' x = True'ならtrueですが 'bool(x)がTrueならば' 'x = 1'や' x = '' 'や' x = [1、 2] 'など –