"if {negative}" vs. "if {positive}" style (was: New to Python)
Cameron Simpson
cs at zip.com.au
Tue Feb 9 22:54:17 EST 2010
On 09Feb2010 21:36, Tim Chase <python.list at tim.thechases.com> wrote:
| Larry Hudson wrote:
| >But a minor rearrangement is simpler, and IMHO clearer:
| >
| >if 'mystring' not in s:
| > print 'not found'
| >else:
| > print 'foundit'
| > print 'processing'
|
| I've always vacillated on whether that would better be written as
| Larry does, or as
|
| if 'mystring' in s
| print 'foundit'
| print 'processing'
| else:
| print 'not found'
|
| removing the "not" from the condition. I admit I choose one over
| the other based on some gut-feeling aesthetic that I can't really
| nail down. I think one of my major influencing factors revolves
| around the negative "not" portion having one or two lines and the
| positive portion having a large block of code. If the code-blocks
| are more equal in size, I tend to use "if {positive}", but if the
| negative "not" section is only 1-2 lines, I tend to do as Larry
| writes and make it harder to miss by using "if {negative}".
| Otherwise the "if {positive}...else" can end up sufficiently distant
| from the "if" that it's easy to miss.
I do it like you, usually: if one branch is small, it comes first, the other
branch is easily in sight under the "else". Otherwise, I tend to go with "if
{positive}", or at any rate "if {the easiest-to-read-form-of-the-test}" if it
all still reads well. If the program flow gets ugly one way, that breaks
"still reads well" and can be cause to flip the condition.
In loops my tendency is a bit less flexible; I often have code like
this:
while ...:
if winnowing-test:
whinge
set flag
continue or break, depending
main body of loop here...
Not a lot of choice about positive/negative in that scenario,
though it fits well with the first criterion.
Cheers,
--
Cameron Simpson <cs at zip.com.au> DoD#743
http://www.cskk.ezoshosting.com/cs/
A Master is someone who started before you did. - Gary Zukav
More information about the Python-list
mailing list