"Jim Jewett" <[EMAIL PROTECTED]> wrote in message news:[EMAIL PROTECTED]
A nice summary, to which I will add just a little. > For a conditional expression, I think the choices are really down > to the following, which was already way too much freedom last > (http://www.python.org/peps/pep-0308.html) time: > > (1) Should it be done at all? > + It would be useful, and avoid certain types of bugs. > - It would encourage bracketing instead of indentation > > PEP 308 decided "not yet, anyhow" > > (2) How many of the keywords (if ... then ... else ... elif) should be > dropped? > (if test then True else False) > + standard english > + standard programming idiom > - adds a "then" keyword > (if test True else False) > + better parallels the if: statement > - starts to run together I think the first form with 'then' better parallels the 'if <cond> :' statement because 'then' functions as a separator between test and True just as ':' or ':\n' functions as a separator between <cond> and <True body>. > (if test1 Val1 elif test2 Val2 elif test3 Val3) > + parallels the if: statement > - encourages overly long code > * but still better than nested parens > > PEP 308 wasn't entirely clear; the words said to keep "elif", but > the examples did not. There was some disagreement on which > of the other three keywords to represent explicitly. (Rather than > only by position.) > > (3) What order should the clauses appear? > (if test then True else False) > (if test1 then Val1 elif test2 Val2 elif test3 Val3 else Val4) > + Natural Order > - do we need "then"? > (True if normal else False) > (Val1 if test1 else Val2 if test2 else Val3 if test3 else Val4) > + Best order for normal/default conditionals > + Best order in general if we weren't used to left-right > processing I an far from convinced on either of these, perhaps because I am not sure about the actual claim. > - But we *do* expect left->right almost everywhere except > assignments - Ambiguous. When expressions a and b both lack boolean operators, as is common in Python given that all objects have a boolean value, a if b else c is mentally parseable as either (a if) b (else c) or a (if b) (else c). I initially though the proposal intended the first. -- Bug prone. The left->right expectation leads to the wrong parsing. Hence we may expect occasional bugs both in writing and reading this construct. > PEP 308 made it clear that "else" should be last. Putting the condition > before the "then" was not as clearcut. > > (4) What sort of punctuation should augment or replace the keywords? > > PEP 308 suggested avoiding punctuation, but it wasn't clearcut. Terry J. Reedy _______________________________________________ Python-Dev mailing list Python-Dev@python.org http://mail.python.org/mailman/listinfo/python-dev Unsubscribe: http://mail.python.org/mailman/options/python-dev/archive%40mail-archive.com