peter at engcorp.com
Mon Nov 28 14:04:57 CET 2005
Tim Henderson wrote:
(Thanks for clarifying to whom you were responding... I saw the other
post but wouldn't have responded since it didn't seem to be in response
to one of mine. :-) )
> would not the more correct way to do this be short circuit
> evaluation. somthing along lines of
> if (len(item) > 0) and (item == '-'): pass
This is "correct" only in a narrow sense. I wouldn't call it "correct
Python" if I saw it in code around here. Most likely (since this always
depends on context), I would replace it with this:
if item and item == '-':
I think it's probably unlikely that the first test would be needed only
on that one line, so it's even more likely that "if item" test would be
done first, by itself, and then other tests on item would be done.
If this was code that needed high performance (i.e. had been detected
with proper profiling as a serious bottleneck) then the slicing approach
would be better (as Fredrik demonstrated).
Hmm... just realized we're going way off track, since we actually have
the original code here and don't need to comment on hypotheticals.
It appears to me that the original input is being treated as some sort
of fixed-length record, with certain characters and text in predefined
positions, specified by index number. With that in mind, I'd actually
say the original code is just fine with "if item[0:1] == '-'" and given
the context it is pretty readable (ignoring the awful formatting with no
whitespace around operators) and "correct". Using ".startswith()" might
have been equally appropriate, but without knowing more detail of the
input data I couldn't say.
More information about the Python-list