[Python-Dev] Adding a conditional expression in Py3.0 (original) (raw)
Terry Reedy tjreedy at udel.edu
Sat Sep 24 04:19:48 CEST 2005
- Previous message: [Python-Dev] Adding a conditional expression in Py3.0
- Next message: [Python-Dev] Mapping Darwin 8.2.0 to Mac OS X 10.4.2 in platform.py
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
"Jim Jewett" <jimjjewett at gmail.com> wrote in message news:fb6fbf5605092112145cfda669 at mail.gmail.com...
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 :' statement because 'then' functions as a separator between test and True just as ':' or ':\n' functions as a separator between and .
(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
- Previous message: [Python-Dev] Adding a conditional expression in Py3.0
- Next message: [Python-Dev] Mapping Darwin 8.2.0 to Mac OS X 10.4.2 in platform.py
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]