Python 2.xでは、再割り当てが可能であるため、これは保証されません。ただし、これが発生した場合でも、比較のためにブール値Trueとブール値Falseが適切に返されます。True
False
Python 3.xではTrue
、とFalse
はキーワードであり、常にとに等しく1
なり0
ます。
Python 2の通常の状況では、常にPython3の場合。
False
オブジェクトは、次bool
のサブクラスであるタイプint
です。
object
|
int
|
bool
これが、あなたの例で機能する唯一の理由['zero', 'one'][False]
です。__index__
リストのインデックス付けは整数、またはメソッドを定義するオブジェクト(thanks mark-dickinson )でのみ機能するため、整数のサブクラスではないオブジェクトでは機能しません。
編集:
これは、現在のPythonバージョンとPython3のバージョンに当てはまります。Python2のドキュメントとPython3のドキュメントはどちらも次のように述べています。
整数には次の2つのタイプがあります。[...]整数(int)[...]ブール値(bool)
ブールサブセクション:
ブール値:これらは真理値FalseとTrueを表します[...]ブール値は、ほとんどすべてのコンテキストで、それぞれ値0と1のように動作します。ただし、文字列に変換すると、文字列「False」または「True」が例外になります。 "がそれぞれ返されます。
Python 2の場合もあります:
数値コンテキスト(たとえば、算術演算子の引数として使用される場合)では、[FalseおよびTrue]はそれぞれ整数0および1のように動作します。
したがって、ブール値はPython2および3では明示的に整数と見なされます。
したがって、Python4が登場するまでは安全です。;-)