peter at engcorp.com
Sun Nov 27 02:31:53 CET 2005
Tom Anderson wrote:
> On Sat, 26 Nov 2005, Peter Hansen wrote:
>>Tom Anderson wrote:
>>>On Sat, 26 Nov 2005, Chris wrote:
>>>> if item[0:1]=="-":
>>>item[0:1] seems a rather baroque way of writing item! I'd actually
>>>suggest writing this line like this:
>>Actually, it's not so much baroque as it is safe... item will fail if
>>the string is empty, while item[0:1] will return '' in that case.
> Ah i didn't realise that. Whether that's safe rather depends on what the
> subsequent code does with an empty string -
I meant "safe" as in "doesn't throw an exception", as item will when
passed an empty string... sometimes you don't want code to throw an
exception, and you don't want to have to do a separate test for certain
conditions that might do so. This technique is one example.
> an empty string might be some
> sort of error (in this particular case, it would mean that the loop test
> had gone wrong, since bool("") == False), and the slicing behaviour would
> constitute silent passing of an error.
> But, more importantly, egad! What's the thinking behind having slicing
> behave like that? Anyone got any ideas? What's the use case, as seems to
> be the fashionable way of putting it these days? :)
Well, since slicing is (I believe, and speaking only roughly) supposed
to return a sequence of the same type as that on which it's operating,
what would be the alternative? Unless you allow slicing to return None,
or raise an exception in certain cases, return a null sequence of the
appropriate type seems to be perfectly logical behaviour when the
requested slice doesn't exist in the input.
But I'm not sure this is from a specific use case so much as a side
effect of other more desirable behaviours of slicing. Asking for this
to behave differently without analyzing the impact it has on slicing in
general is likely to overlook something crucial...
More information about the Python-list