question of style

Erik Max Francis max at
Thu Jul 2 22:08:57 CEST 2009

Simon Forman wrote:
> Hey I was hoping to get your opinions on a sort of minor stylistic
> point.
> These two snippets of code are functionally identical. Which would you
> use and why?
> The first one is easier [for me anyway] to read and understand, but
> slightly less efficient, while the second is [marginally] harder to
> follow but more efficient.
> ## First snippet
> if self.higher is self.lower is None: return
> if self.lower is None: return self.higher
> if self.higher is None: return self.lower
> ## Second snippet
> if self.higher is None:
>     if self.lower is None:
>         return
>     return self.lower
> if self.lower is None:
>     return self.higher
> What do you think?

Explicit is always better, `return None` when that is your intent. 
`return` shouts to the reader, "I want to get out of this function now, 
and no one cares about the return result."

Personally, I only use the one-liner if/else clauses if it's an 
extremely trivial condition, and even then, usually not there.  (The 
only place I use it consistently is `if __name__ == '__main__': 
main()`.)  If it's part of something more important that needs 
inspection -- as this obviously does given the questions you've had 
about it, doesn't skip space.  Newlines are free.

Even when expanding about the first test, there's no reason to do 
chained `if`s.  One `if` with an `and` works just fine.

Paul Rubin's looked to be the best overall replacement, as the logic 
here looks strangely turned inside out.  You're obviously looking for 
which one _isn't_ `None`, so write the tests that way.  It's much easier 
for everyone else (including your potential future self) to follow.

Erik Max Francis && max at &&
  San Jose, CA, USA && 37 18 N 121 57 W && AIM/Y!M/Skype erikmaxfrancis
   They are ill discoverers that think there is no land when they can
    see nothing but sea. -- Francis Bacon

More information about the Python-list mailing list