if, continuation and indentation

Nathan Rice nathan.alexander.rice at gmail.com
Sun May 30 01:50:02 EDT 2010


I prefer to just break such things into multiple lines.  You're doing that
already anyhow, it's not much of a speed hit, and it makes exactly what
you're testing explicit.  If I break a statement onto multiple lines I only
use parenthesis, and that is as a last resort.  In my opinion there's almost
always some combination of variable assignments and lambda expressions that
uses fewer lines and is clearer.

is_correct_style = width == 0 and height == 0 and color == 'red'
if (is_correct_style and emphasis == 'strong') or highlight > 100:


On Sat, May 29, 2010 at 8:59 PM, Mark Lawrence <breamoreboy at yahoo.co.uk>wrote:

> On 30/05/2010 01:23, john wrote:
>
>> On May 28, 10:37 am, "Colin J. Williams"<cjwilliam... at gmail.com>
>> wrote:
>>
>>> On 28-May-10 05:54 AM, Jonathan Hartley wrote:
>>>
>>>  On May 27, 1:57 pm, Jean-Michel Pichavant<jeanmic... at sequans.com>
>>>> wrote:
>>>>
>>>>> HH wrote:
>>>>>
>>>>>> I have a question about best practices when it comes to line wrapping/
>>>>>> continuation and indentation, specifically in the case of an if
>>>>>> statement.
>>>>>>
>>>>>
>>>  When I write an if statement with many conditions, I prefer to use a
>>>>>> parenthesis around the whole block and get the implicit continuation,
>>>>>> rather than ending each line with an escape character.  Thus, using
>>>>>> the example from the style guide (http://www.python.org/dev/peps/
>>>>>> pep-0008/) I would write:
>>>>>>
>>>>>
>>>       if (width == 0 and
>>>>>>          height == 0 and
>>>>>>          color == 'red' and
>>>>>>          emphasis == 'strong' or
>>>>>>          highlight>    100):
>>>>>>          raise ValueError("sorry, you lose")
>>>>>>
>>>>>
>>>  The problem should be obvious -- it's not easy to see where the
>>>>>> conditional ends and the statement begins since they have the same
>>>>>> indentation.  Part of the problem, I suppose, is that Emacs indents
>>>>>> 'height' and the other lines in the conditional to 4 spaces (because
>>>>>> of the parenthesis).  How do people deal with this situation?
>>>>>>
>>>>>
>>>  Thanks,
>>>>>> Henrik
>>>>>>
>>>>>
>>>  One possible solution
>>>>>
>>>>
>>>       if (
>>>>>              width == 0 and
>>>>>              height == 0 and
>>>>>              color == 'red' and
>>>>>              emphasis == 'strong' or
>>>>>              highlight>    100
>>>>>         ):
>>>>>          raise ValueError("sorry, you lose")
>>>>>
>>>>
>>>  JM
>>>>>
>>>>
>>>  I've always liked this, or even:
>>>>
>>>
>>>     if (
>>>>        width == 0 and
>>>>        height == 0 and
>>>>        color == 'red' and
>>>>        emphasis == 'strong' or
>>>>        highlight>    100
>>>>    ):
>>>>        raise ValueError("sorry, you lose")
>>>>
>>>
>>>  but my co-workers have uniformly gone bananas whenever I try it.
>>>>
>>>
>>> I liked:
>>>
>>> On 27-May-10 08:48 AM, Xavier Ho wrote:
>>>  >  On 27 May 2010 22:22, HH<henri... at gmail.com>  <mailto:
>>> henri... at gmail.com>>  wrote:
>>>
>>>  >
>>>  >           if (width == 0 and
>>>  >               height == 0 and
>>>  >               color == 'red' and
>>>  >               emphasis == 'strong' or
>>>  >               highlight>  100):
>>>  >               raise ValueError("sorry, you lose")
>>>  >
>>>  >
>>>  >  I've gotta say - I've bumped into this problem before, and I'm sure
>>> many
>>>  >  other have - this is a valid question. It just hasn't bothered me
>>> enough
>>>  >  to ask...
>>>  >
>>>  >  Correct me if I'm wrong, but I think the following is equivalent, and
>>>  >  looks better. Although this won't fix all ugly cases in that
>>> problem..
>>>  >
>>>  >  if (width, height, color, emphasis) == (0, 0, 'red', 'strong') or
>>>  >  highlight>  100:
>>>  >        raise ValueError("sorry, you lose")
>>>  >
>>>  >  Cheers,
>>>  >  Xav
>>>
>>> but nobody commented.
>>>
>>> Colin W.
>>>
>>
>> Colin:
>> Sure, you can do it that way.  IMO, though, the OP was  wrong, and so
>> is the PEP.  Source code is meant to communicate.  So it must transmit
>> the correct information to the computer; it also must inform your
>> coworkers.  That means that you have a responsibility to care what
>> they think, though you privately have your opinions.  Another reason
>> the PEP is faulty in this circumstance is that a misplaced backslash,
>> or a missing one, is easily found and fixed.  A misplaced parentheses,
>> or just one of a pair, will transform your source code into something
>> which may compile and then give faulty results:  a disaster.
>> So keep it simple, and make it legible.
>> Yours,
>> John
>>
>
> IMHO complete garbage, if your editor doesn't show misplaced or missing
> parenthesis by highlighting you're using the wrong editor :)
>
> Regards.
>
> Mark Lawrence.
>
>
>
> --
> http://mail.python.org/mailman/listinfo/python-list
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/python-list/attachments/20100530/395fbdf8/attachment-0001.html>


More information about the Python-list mailing list