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 <breamore...@yahoo.co.uk
<mailto:breamore...@yahoo.co.uk>> wrote:

    On 30/05/2010 01:23, john wrote:

        On May 28, 10:37 am, "Colin J. Williams"<cjwilliam...@gmail.com
        <mailto:cjwilliam...@gmail.com>>
        wrote:

            On 28-May-10 05:54 AM, Jonathan Hartley wrote:

                On May 27, 1:57 pm, Jean-Michel
                Pichavant<jeanmic...@sequans.com
                <mailto:jeanmic...@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...@gmail.com
            <mailto:henri...@gmail.com>> <mailto:henri...@gmail.com
            <mailto:henri...@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.


--
http://mail.python.org/mailman/listinfo/python-list

Reply via email to