On Sat, Dec 7, 2013 at 9:01 PM, Steven D'Aprano <[email protected]> wrote: > For the record, slice objects existed in Python 1.5, so they have been > around and used for extended (three argument) slicing for a long time. > It's only the two argument slicing that called __getslice__.
According to the NEWS for 1.4b2 (1996), slice objects and Ellipsis were added to support Jim Hugunin's Numeric, the ancestor of NumPy. http://hg.python.org/cpython/file/129f1299d4e9/Misc/NEWS Here's the 1.4 slice/ellipsis implementation by Jim Hugunin and Chris Chase: http://hg.python.org/cpython/file/129f1299d4e9/Objects/sliceobject.c In NumPy, Ellipsis is used to insert as many ':' as needed based on the array shape. For example: >>> import numpy as np >>> a = np.reshape(np.arange(8), (1,2,2,2)) >>> a array([[[[0, 1], [2, 3]], [[4, 5], [6, 7]]]]) >>> a[:,:,:,1] array([[[1, 3], [5, 7]]]) >>> a[...,1] array([[[1, 3], [5, 7]]]) Naturally the comma in the above examples creates a tuple: class Test(object): def __getitem__(self, key): return key, type(key) >>> Test()[:,1] ((slice(None, None, None), 1), <type 'tuple'>) >>> Test()[...,1] ((Ellipsis, 1), <type 'tuple'>) _______________________________________________ Tutor maillist - [email protected] To unsubscribe or change subscription options: https://mail.python.org/mailman/listinfo/tutor
