question of style

Simon Forman sajmikins at gmail.com
Thu Jul 2 13:58:56 EDT 2009


On Jul 2, 1:44 pm, Duncan Booth <duncan.bo... at invalid.invalid> wrote:
> Simon Forman <sajmik... at gmail.com> 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?
>
> > (One minor point: in the first snippet, the "is None" in the first
> > line is superfluous in the context in which it will be used, the only
> > time "self.lower is self.higher" will be true is when they are both
> > None.)
>
> I'd write the first one as:
>
>         if self.lower is None:
>                 return self.higher
>         if self.higher is None:
>             return self.lower
>
> because the entire first 'if' statement is redundant.
>
> As a matter of style however I wouldn't use the shorthand to run two 'is'
> comparisons together, I'd write that out in full if it was actually needed
> here.
>
> Likewise in the second one:
>
>     if self.lower is None:
>         return
>     return self.lower
>
> is obviously the same as:
>
>         return self.lower
>
> so apart from reversing the order of the comparisons once you've dropped
> the redundant test it is the same as the first one.

Wow. The equivalence in the second bit is obvious enough-- in
hindsight :] but I totally missed the redundancy in the first bit. I
must be getting old.

Thank you very much.



More information about the Python-list mailing list