2017-04-18 6 views
3

この構文を私に説明することはできますか?私はドキュメントやブログを検索しましたが、配列スライスのインデックスとしてブール値を使用することについての言及は見つかりませんでした。ブール値をインデックスとしてスライスする配列

is_negative = num_as_string[0] == '-' 
num_as_string[is_negative:] 

私の推測がFalseは確かに誰もが知っています0と1にキャストされている真にキャストされているか、私は、任意のドキュメントを指すことができるということです。私はconvert_base.pyこのスクリプトでは、この構文を見つけましたか?

>>> a = [1,2,3] 
>>> a[True:] 
[2,3] 
>>> a[False:] 
[1,2,3] 
>>> a[:False] 
[] 
>>> a[:True] 
[1] 
>>> a[False:True] 
[1] 
>>> a[True:True] 
[] 
>>> a[False:False] 
[] 
>>> a[True:False] 
[] 
>>> a[False::True+1] 
[1,3] 
+0

Pythonで「キャスティング」という言葉を考えない方が良いでしょう。この用語はしばしばゆるやかに投げかけられますが、Pythonのような非常に動的な言語では、すべてがオブジェクトであるという意味では意味がありません。 –

答えて

3

以外TrueFalseは、Pythonスライス機構復帰によって使用容易それぞれ1及び0に強制されるINTのサブクラス、それら__index__方法であることから整数値をFalse有します10

>>> class Decade(object): 
... def __index__(self): 
...  return 10 
... 
>>> range(20)[Decade():] # list(range(...))[Decade():] for Python 3 
[10, 11, 12, 13, 14, 15, 16, 17, 18, 19] 

>>> True.__index__() 
1 
>>> False.__index__() 
0 

あなたは、一般的に__index__メソッドを定義することにより、任意のオブジェクトをスライスすることができます

+0

毎日新しいことを学びます。 True + True = 2 – Tristen

+0

ありがとう!この説明は役に立ちます。 –

2

TrueFalseboolintのサブクラスのインスタンスです。 Trueは整数値1を有し、0

関連する問題