False == 0
Python では、およびが保証されていますかTrue == 1
(ユーザーによって再割り当てされていないと仮定)? たとえば、次のコードが Python のバージョン (既存のバージョンと、おそらく将来のバージョンの両方) に関係なく、常に同じ結果を生成することが何らかの形で保証されていますか?
0 == False # True
1 == True # True
['zero', 'one'][False] # is 'zero'
公式ドキュメントへの参照があれば、大変ありがたく思います。
多くの回答で指摘されているように、bool
は を継承しますint
。したがって、この質問は次のように言い換えることができます。「ドキュメントには、プログラマーが値 と を持つ0
整数1
から継承されたブール値を利用できると正式に記載されていますか?」この質問は、実装の詳細が原因で失敗しない堅牢なコードを書く際に重要です。
ベストアンサー1
Python 2.x では、と が再割り当てされる可能性があるため、これは保証されません。ただし、このような場合でも、比較のためにブール値の True とブール値の False が適切に返されます。True
False
Python 3.x ではTrue
、 と はキーワードであり、常におよび とFalse
等しくなります。1
0
Python 2 の通常の状況では、そして Python 3 では常に次のようになります。
False
bool
オブジェクトは のサブクラスである 型ですint
:
object
|
int
|
bool
これが、あなたの例で、が機能する唯一の理由です['zero', 'one'][False]
。リストのインデックスは整数、または整数を定義するオブジェクトでのみ機能するため、整数のサブクラスではないオブジェクトでは機能しません。__index__
方法(ありがとうマーク・ディキンソン)。
編集:
これは現在のPythonバージョンとPython 3に当てはまります。Python 2 のドキュメントそしてそのPython 3 のドキュメント両者ともこう言う。
整数には次の 2 種類があります: [...] 整数 (int) [...] ブール値 (bool)
ブールサブセクションでは:
ブール値: これらは、真理値 False と True を表します [...] ブール値は、ほとんどすべてのコンテキストでそれぞれ値 0 と 1 のように動作しますが、例外として、文字列に変換されると、それぞれ文字列 "False" または "True" が返されます。
もあります、Python 2の場合:
数値コンテキスト(たとえば、算術演算子の引数として使用される場合)では、これら [False と True] はそれぞれ整数 0 と 1 のように動作します。
したがって、ブール値は Python 2 および 3 では明示的に整数として扱われます。
つまり、Python 4 が登場するまでは安全です。 ;-)