[Python-Dev] Python version of PySlice_GetIndicesEx

Michael Hudson mwh@python.net
15 Jul 2002 10:36:12 +0100


Guido van Rossum <guido@python.org> writes:

> (I changed the subject)
> 
> > When I was going through the sources of sliceobject.c I found the function 
> > PySlice_GetIndicesEx.  It performs the magic of trimming a slice into the 
> > range of indices of a sequence, including negative indices and intervals 
> > with None as start or stop value.  A comment in this function says:
> > 
> >  /* this is harder to get right than you might think */

And it is.

> > Wouldn't it be a good idea to expose this nontrivial functionality to 
> > Python code as a method of slice objects?
> 
> I dunno.  It seems that most code that actually uses slices is written
> in C anyway.
> 
> > The method would take an integer argument (length) and return an
> > xrange object.
> 
> Why an xrange object?  That's not inspectable.  *If* we were to do
> this (which I doubt) it should return a tuple of three ints.

Yes.

> > It should make it much 
> > easier to implement user types that support extended slicing:
> > 
> >     def __getitem__(self, index):
> >         if isinstance(index, slice):
> >             return [get_item_at(i) for i in index.trim(len(self))]
> >         else:
> >             return get_item_at(index)
> > 
> > Suggestions for a better name than trim?
> 
> getindices()

When I was debugging this function, I wrote a method called indices().
Actually, I think I'm probably in favour of adding this method, if
only to make writing clearer test cases easier.

[...]

[Tim]
> Just to be helpfully irritating, I'll note that Zope's C
> implementation of slice index normalization for BTreeItems objects
> was off in nearly every way possible, until a few weeks ago.  It
> really is difficult to get this right.

No kidding.

Cheers,
M.

-- 
  I think perhaps we should have electoral collages and construct
  our representatives entirely of little bits of cloth and papier 
  mache.
                  -- Owen Dunn, ucam.chat, from his review of the year