On 10/12/2010 9:52 AM, Antoon Pardon wrote:
On Fri, Oct 08, 2010 at 05:05:26PM -0400, Terry Reedy wrote:
But you really seem to be saying is "What if I sometimes want the
end points included and sometimes do not?"  Slice syntax by itself
cannot handle all four cases, only one, one was chosen and that was
closed-open.

If you want flexibility, consider the following:

class my_list(list):
     def __getitem__(self, key, include_start=True, include_stop=False):

Sorry, the above is a holdover from a previous, experimental version. In this version, the extra parameters should be eliminated.
This should be just the expected
         def __getitem__(self, key):

         if (isinstance(key,tuple) and len(key)==2 and
isinstance(key[0], slice)
           and isinstance(key[1],tuple) and len(key[1])==2):
             key, (include_start, include_stop) = key

Here I unconditionally set the two include variables from the key.
The default values are ignored and are pure holdover noise.

             start,stop,stride = key.indices(len(self))
             if include_start == False:
                 start += 1
             if include_stop == True:
                 stop += 1
             key = slice(start,stop,stride)
             print(key)
         return list.__getitem__(self, key)

ll = my_list(range(10))

That seems to be an undocumented feature. I didn't know it was possible
to use extra parameters after key in __getitem__.

They never get passed, and as I said above, should not have been there in the version I posted. Sorry for the noise. The actual point is that keys can be tuples and tuples can contain a slice and other info.

--
Terry Jan Reedy

--
http://mail.python.org/mailman/listinfo/python-list

Reply via email to