[Python-ideas] Where did we go wrong with negative stride?

MRAB python at mrabarnett.plus.com
Thu Oct 31 03:57:34 CET 2013


On 31/10/2013 01:43, Ethan Furman wrote:
> On 10/30/2013 06:36 PM, MRAB wrote:
>> On 31/10/2013 00:05, אלעזר wrote:
>>> 2013/10/31 MRAB <python at mrabarnett.plus.com>:
>>>> On 30/10/2013 23:00, Eric Snow wrote:
>>>>>
>>>>> On Wed, Oct 30, 2013 at 4:47 PM, Terry Reedy <tjreedy at udel.edu> wrote:
>>>>>>
>>>>>> I though of using a magic symbol, $, for that -- a[$-n]. But aside from
>>>>>> the issue of using one of the 2 remaining unused ascii symbols for
>>>>>> something that can already be done, it would not work in a slice call.
>>>>>
>>>>>
>>>>> Is that like where you have 1 more shot on your camera and you don't
>>>>> want to use it for fear that something more spectacular might show up
>>>>> afterward?  (and hope that you didn't leave your lens cap on when you
>>>>> finally take the picture!)  :-)
>>>>>
>>>> I don't think it's that bad; I count 3: "!", "$" and "?". :-)
>>>>
>>> Can't it be done by adding a __sub__ method to len?
>>>
>>> a[:len-n]
>>>
>>> Readable and short.
>>>
>> -1
>>
>> I don't like how it makes that function special.
>
> Not only that, but len wouldn't know what it was subtracting from.
>
But you could have an "End" class, something like this:

class End:
     def __init__(self, offset=0):
         self.offset = offset

     def __sub__(self, offset):
         return End(self.offset - offset)

     def __add__(self, offset):
         return End(self.offset + offset)

     def __str__(self):
         if self.offset < 0:
             return 'End - {}'.format(-self.offset)

         if self.offset > 0:
             return 'End + {}'.format(self.offset)

         return 'End'

Unfortunately, all those methods that expect an index would have to be
modified. :-(



More information about the Python-ideas mailing list