アルシャジイの答えの背景を提供するだけです。
2 つのブール値True
とFalse
は、整数と奇妙な関係にあります。
一方では、それらは異なる文字列表現を持ち、別々の ID を持っています:
>>> print(True)
True
>>> print(1)
1
>>> True is 1
False
一方、それらは比較および算術演算では整数として動作します。
>>> True == 1
True
>>> True + 1
2
この動作の理由は互換性です。ずっと前に、bool
タイプは存在しませんでした。「ブール」演算子は C の動作をコピーし、「false」と「true」に and を0
再利用します。1
最終的に、Guido はこれがあまり意味をなさないことに気付き、私たちが知っていて大好きな定数を追加しました。
しかし、問題がありました。それでも、ブール値を整数のように扱うコードはすでにたくさんありました。ブール演算が「正しい」型を使用して開始された場合、このコードはすべて壊れます。
そこでグイドは妥協した。ブール値には独自の型 がありbool
、整数とは異なる方法で表示されます。しかし、算術演算と比較、特に__eq__
と__hash__
では、それらは 1 つの同じものとして扱われます。そのため、古いコードは引き続き機能しますが、新しいコードは引き続き新しいbool
型を利用できます。
多分それは Python 4 で変更されるでしょう。しかし今のところ、bool
は のサブクラスであり、それとint
一緒に暮らす必要があります。
(関連する注意事項として、これが、他の Python キーワードのように小文字ではなく、タイトル ケースでTrue
ある理由の 1 つです。)False