For review: PEP 308 - If-then-else expression
Parzival Herzog
parz at shaw.SpamBucket.ca
Mon Feb 10 16:15:38 EST 2003
More information about the Python-list mailing list
Mon Feb 10 16:15:38 EST 2003
- Previous message (by thread): For review: PEP 308 - If-then-else expression
- Next message (by thread): For review: PEP 308 - If-then-else expression
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
"Guido van Rossum" <guido at python.org> wrote in message news:mailman.1044638179.4983.python-list at python.org... > Requests for an if-then-else ("ternary") expression keep coming up > on comp.lang.python. This PEP contains a concrete proposal of a > fairly Pythonic syntax. > > Proposal > > The proposed syntax is as follows: > > <expression1> if <condition> else <expression2> I vote to accept this proposal. PEP 308: +1e308 The proposed syntax is, by definition, 'Pythonic', being authored by the BDFL, notwithstanding BDFL's modest claim, that it is only 'fairly' Pythonic. Fairly Pythonic IS Pythonic. *** I challenge anyone to come up with an empirically verifiable and universally applicable definition of 'Pythonic feature', other that 'Pythonic' is whatever BDFL says is 'Pythonic'. ****Corollory: No-one but BDFL can declare something to be "Pythonic" or "Unpythonic". ****Corollary 2: "Pythonic" does not mean "what I am used to reading", or "what I would like to read/write", or "what I would like others to read or write." > Alternatives > The alternative to PEP 308 is already available in Python. Here is the schema: (lambda: true_expression, lambda: false_expression)[not test_expression]() for example: >>> (lambda: 'nice! '*5, lambda: 'naughty! '*3)[not 2*2 == 4]() 'nice! nice! nice! nice! nice! ' >>> So, everyone must accept that the semantics of lazily evaluated conditional selection, without the use of auxillary variables is already present in Python. It follows that PEP 308 approval or disapproval must be ENTIRELY based on the merits or demerits of the syntax. Notice that the 'not' is necessary, to ensure that an arbitrary 'test_expression' provides a 'boolean' (0 or 1) result, with the pleasing side-effect of ordering the true_expression first. I really like the '()' at the end, which is like a little pat on the back, a sort of 'Jolly good coding, my fine fellow!' Lots of 'lambda's make this construction a standout, and the colons can help ease the readability for the traditionalists, who had the colon to hold onto with their old familiar 'if: ... else: ... ' . The 'not' is also a good reminder that the test expression is at the end, and therefore needs to be reversed, if it is to work correctly on a selection that /preceeds/ it, as opposed to one which /follows/ it, as in the more familiar 'if test: ... '. And there is a nice symmetry with the two pairs of parentheses ( ... ) [...] () surrounding the bracketted inverted test. Oh, but I argue for the 'Alternative', which is already in Python, when, forsooth, I truly wish to plead the case for the 'Proposal,' which is not. P.S. Should PEP 308 be rejected, all you sneaky functional expression oriented subversive cryptic Pythonistas can 'Use the Alternative, Luke!' Long Live BDFL! (and PEP 308) Yours Alternative-ly: Parzival (reply-to is munged for spammers)
- Previous message (by thread): For review: PEP 308 - If-then-else expression
- Next message (by thread): For review: PEP 308 - If-then-else expression
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
More information about the Python-list mailing list