if, continuation and indentation
Colin J. Williams
cjwilliams43 at gmail.com
Sun May 30 15:10:23 EDT 2010
On 30-May-10 01:50 AM, Nathan Rice wrote:
> 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
> <mailto: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
> <mailto: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
> <mailto: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>> <mailto: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
>
>
Perhaps the arrangement below shows the matching a little better than
the Xav suggestion. The main point is that, to me, the tuple shows the
item by item matching better than a series of and clauses:
# tif.py
(width, height, color, emphasis)= 0, 0, 'red', 'strong'
highlight= 99
if (width, height, color, emphasis) == \
( 0, 0, 'red', 'strong') or highlight> 100:
raise ValueError("sorry, you lose")
Colin W.
More information about the Python-list
mailing list