2012-04-21 5 views
9

可能性の重複は:
Is False == 0 and True == 1 in Python an implementation detail or is it guaranteed by the language?Falseが "0"、Trueが "1"であることが保証されていますか?

は、私は、Python 2.6(CPythonと)...

>>> a=[100,200] 
>>> a[True] 
200 
>>> a[False] 
100 

を使用して、次の作品は、他のPython実装にこの移植性があることを今日気づきました(例えば、True/Falseはintから継承することが保証されていますか?True g他の非ゼロ数値の代わりに1に評価することを保証しますか?)これが有用な状況はありますか?それはpart of the language specificationので、任意のPython実装と同等にブール値を実装する必要があります

+6

(答えはありませんが、面白いかもしれません:Python 2.6以前では、TrueとFalseは単なる変数なので... True、False = "hello"、 "world" '...しかし、 * Reserved * status in Python 3.x) –

+0

私が知る限り、TrueとFalseは1と0のラベルです。1 == Trueと0 == False。したがって、リストの0番目と1番目の項目を返します。 –

+0

@gwynhowell:いいえ、 'True'と' False'はそれぞれ 'bool'型のオブジェクトです。 –

答えて

11

...それは三項演算子の別の形態として使用することができように思えるが、私はそこに獲得されたどのくらいかわかりません整数。

ブール

これらの真実は偽と真の値を表します。値FalseとTrueを表す2つのオブジェクトが唯一のBooleanオブジェクトです。ブール型は単純な整数のサブタイプであり、ブール値はほとんどすべてのコンテキストで値0と1のように動作しますが、文字列に変換すると文字列"False"または"True"がそれぞれ返されます。

4

はい - これは保証されている - TrueFalseを再割り当てすることができることを警告して、ブール演算の結果には影響しません。 (ドキュメンタリーの証明のためにIgnacioに感謝します。)事実、三元演算子がなかったとき、これはそれをエミュレートするために使用された方法の1つでした。今日、三項演算子が必要な場合は三項演算子を使います。しかし、時にはこの構造体はまだ有用です。例:

>>> even_odd = [[], []] 
>>> for i in range(10): 
...  even_odd[i % 2 == 1].append(i) 
... 
>>> print even_odd 
[[0, 2, 4, 6, 8], [1, 3, 5, 7, 9]] 

これも辞書で行うことができます。それは...三項演算子相当してい

>>> even, odd = [], [] 
>>> for i in range(10): 
...  (even if i % 2 == 1 else odd).append(i) 
... 
>>> even, odd 
([1, 3, 5, 7, 9], [0, 2, 4, 6, 8]) 

しかし、私は実際に簡単に少なくともこの場合には、読むために、リスト・インデックスのバージョンを見つけます。 YYMV。

+0

+1。 – mgilson

+0

'even_odd [i%2] .append(i)'と言うのは簡単ではありませんか? – thebjorn

関連する問題