how to format long if conditions
Steven D'Aprano
steve+comp.lang.python at pearwood.info
Sat Aug 27 03:24:12 EDT 2011
Arnaud Delobelle wrote:
> Hi all,
>
> I'm wondering what advice you have about formatting if statements with
> long conditions (I always format my code to <80 colums)
>
> Here's an example taken from something I'm writing at the moment and
> how I've formatted it:
>
>
> if (isinstance(left, PyCompare) and isinstance(right, PyCompare)
> and left.complist[-1] is right.complist[0]):
> py_and = PyCompare(left.complist + right.complist[1:])
> else:
> py_and = PyBooleanAnd(left, right)
>
> What would you do?
I believe that PEP 8 now suggests something like this:
if (
isinstance(left, PyCompare) and isinstance(right, PyCompare)
and left.complist[-1] is right.complist[0]):
)
py_and = PyCompare(left.complist + right.complist[1:]
else:
py_and = PyBooleanAnd(left, right)
I consider that hideous and would prefer to write this:
if (isinstance(left, PyCompare) and isinstance(right, PyCompare)
and left.complist[-1] is right.complist[0]):
py_and = PyCompare(left.complist + right.complist[1:]
else:
py_and = PyBooleanAnd(left, right)
Or even this:
tmp = (
isinstance(left, PyCompare) and isinstance(right, PyCompare)
and left.complist[-1] is right.complist[0])
)
if tmp:
py_and = PyCompare(left.complist + right.complist[1:]
else:
py_and = PyBooleanAnd(left, right)
But perhaps the best solution is to define a helper function:
def is_next(left, right):
"""Returns True if right is the next PyCompare to left."""
return (isinstance(left, PyCompare) and isinstance(right, PyCompare)
and left.complist[-1] is right.complist[0])
# PEP 8 version left as an exercise.
# later...
if is_next(left, right):
py_and = PyCompare(left.complist + right.complist[1:]
else:
py_and = PyBooleanAnd(left, right)
--
Steven
More information about the Python-list
mailing list