Prev: type error raise
Next: Minor annoyances with properties
From: Colin J. Williams on 30 May 2010 15:10 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(a)yahoo.co.uk > <mailto:breamoreboy(a)yahoo.co.uk>> wrote: > > On 30/05/2010 01:23, john wrote: > > On May 28, 10:37 am, "Colin J. Williams"<cjwilliam...(a)gmail.com > <mailto:cjwilliam...(a)gmail.com>> > wrote: > > On 28-May-10 05:54 AM, Jonathan Hartley wrote: > > On May 27, 1:57 pm, Jean-Michel > Pichavant<jeanmic...(a)sequans.com > <mailto:jeanmic...(a)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...(a)gmail.com > <mailto:henri...(a)gmail.com>> <mailto:henri...(a)gmail.com > <mailto:henri...(a)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.
From: Lie Ryan on 31 May 2010 17:15 On 05/31/10 05:10, Colin J. Williams wrote: > On 30-May-10 01:50 AM, Nathan Rice wrote: >> On 27-May-10 08:48 AM, Xavier Ho wrote: >> > On 27 May 2010 22:22, HH<henri...(a)gmail.com >> <mailto:henri...(a)gmail.com>> <mailto:henri...(a)gmail.com >> <mailto:henri...(a)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 :) >> >> > > 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") How about: all(a == b for a,b in ((width, 0), (height, 0), (color, 'red'), (emphasis, 'strong'))))
From: Colin J. Williams on 31 May 2010 19:34 On 31-May-10 17:15 PM, Lie Ryan wrote: > On 05/31/10 05:10, Colin J. Williams wrote: >> On 30-May-10 01:50 AM, Nathan Rice wrote: >>> On 27-May-10 08:48 AM, Xavier Ho wrote: >>> > On 27 May 2010 22:22, HH<henri...(a)gmail.com >>> <mailto:henri...(a)gmail.com>> <mailto:henri...(a)gmail.com >>> <mailto:henri...(a)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 :) >>> >>> >> >> 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") > > How about: > > all(a == b for a,b in ((width, 0), (height, 0), (color, 'red'), > (emphasis, 'strong')))) You need to add "or highlight > 100"
From: Giacomo Boffi on 4 Jun 2010 05:22 HH <henrikho(a)gmail.com> writes: > if (width == 0 and > height == 0 and > color == 'red' and > emphasis == 'strong' or > highlight > 100): > raise ValueError("sorry, you lose") if (width == 0 and height == 0 and color == 'red' and emphasis == 'strong' or highlight > 100): raise ValueError("sorry, you lose") -- compro mobili vecchi - vendo mobili antichi
From: Aahz on 4 Jun 2010 17:25 In article <mailman.663.1274969462.32709.python-list(a)python.org>, Tim Chase <python.list(a)tim.thechases.com> wrote: > >While it's not PEP material, I tend to use the coding standards I >learned working for Computer Sciences Corporation (10 yrs ago, so >things may have changed) that mandated 2 levels of indentation >for continued lines, turning the above into > > if (width == 0 and > height == 0 and > color == 'red' and > emphasis == 'strong' or > highlight> 100): > # or the closing "):" on this line, > # aligned with the previous line > raise ValueError("sorry, you lose") +1 -- Aahz (aahz(a)pythoncraft.com) <*> http://www.pythoncraft.com/ "If you don't know what your program is supposed to do, you'd better not start writing it." --Dijkstra
First
|
Prev
|
Next
|
Last
Pages: 1 2 3 4 5 Prev: type error raise Next: Minor annoyances with properties |