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