2017-04-18 2 views
3

Kann mir jemand diese Syntax erklären? Ich habe in docs/blogs gesucht, kann aber keine Erwähnung finden, Booleans als Indizes für das Array-Slicing zu verwenden. Ich fand diese Syntax in diesem Skript convert_base.py:Array Slicing mit Booleans als Indizes

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

Meine Vermutung ist, dass False 0 gegossen wird und Getreu 1. gegossen wird jemand sicher Kennt oder mich auf jede Dokumentation zeigen kann?

>>> 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

Es ist am besten, nicht in Python zu "Casting" zu denken. Während der Begriff oft lose herumgeworfen wird, ist er in einer sehr dynamischen Sprache wie Python, wo alles ein Objekt ist, ziemlich bedeutungslos. –

Antwort

3

Abgesehen von der Tatsache, dass True und False sind Subklassen von int der auf 1 bzw. 0 leicht dazu gezwungen werden, ihre __index__ vom Python slice Mechanismus kehrt verwendete Methoden 1 und 0:

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

Sie mit beliebigen Objekten im allgemeinen in Scheiben schneiden kann ein __index__ Verfahren durch die Definition:

>>> 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] 
+0

Sie lernen jeden Tag etwas Neues. True + True = 2 – Tristen

+0

Vielen Dank! Diese Erklärung ist hilfreich. –

2

True und False sind Instanzen von bool, eine Unterklasse von int. True hat den ganzzahligen Wert 1 hat False den ganzzahligen Wert 0.