Schneiden Wenn mit Slicing experimentiert ich ein seltsames Verhalten in Python bemerkt 2.7:Python - Grund erweitert vs
class A:
def __getitem__(self, i):
print repr(i)
a=A()
a[:] #Prints slice(0, 9223372036854775807, None)
a[::] #prints slice(None, None, None)
a[:,:] #prints (slice(None, None, None), slice(None, None, None))
Bei Verwendung eines einzigen Doppelpunkt in den Klammern, die Scheibe Objekt 0 als Start und eine große ganze Zahl als Ende. Wenn ich jedoch mehr als einen einzelnen Doppelpunkt verwende, sind Start und Stopp Keine, wenn nicht angegeben.
Ist dieses Verhalten garantiert oder implementierungsspezifisch?
Die Documentation sagt, dass der zweite und dritte Fall erweitert Slicing sind, während der erste Fall nicht ist. Ich konnte jedoch keine klare Erklärung für den Unterschied zwischen Basis- und erweitertem Slicing finden.
Gibt es noch andere "Spezialfälle", die ich beachten sollte, wenn ich __getitem__
außer Kraft setze und erweiterte Schnitte akzeptieren möchte?
Mit Python 2.7 bekomme ich '2147483647' (2^31-1), also ist der Wert definitiv systemspezifisch. Mit Python 3 bekomme ich in allen Fällen 'None'. –
Es ändert sich auch in "None", wenn Sie "A" zu einer neuen Stilklasse machen. –