[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