Proposed PEP for a Conditional Expression
Ken Seehof
kseehof at neuralintegrator.com
Thu Sep 13 02:16:31 EDT 2001
> "Terry Reedy" <tjreedy at home.com> wrote in message
> news:OsUn7.4220$5A3.1585645 at news1.rdc2.pa.home.com...
> >
> > "Greg Ewing" <greg at cosc.canterbury.ac.nz> wrote in message
> > news:3BA00239.DECE6412 at cosc.canterbury.ac.nz...
> > > "Terry Reedy" <tjreedy at home.com>:
> > >
> > > > I agree that the above is backwards.
> > > > <cond> if <expr> else <expr>
> > >
> > > No! That sounds way too much like Forth!
> >
> > It is exactly like C, whose ? : equivalent is the impetus for the
> > proposed change.
> > Of course, if you don't like the form of C's conditional expressions,
> > you won't like its translation into Python.
>
> C's syntax doesn't overload an already existing keyword, and is therefore
> arguably clearer. None of the proposed keyword-overloading syntaxes mesh
> well with list comprehensions.
Seems like
<expr> if <cond> else <expr>
is analogous to
'[' <expr> for <var> in <sequence> ']'
Of course, in the former case, the [] is missing because the resulting
expression
is not a list.
Since this is python, :"<expr> if <cond> else <expr>" is the most
appropriate
order, since it unambiguously yields expected results consistent with
English.
If we use the other order, with the right keyword it would be:
<cond> then <expr> else <expr>
but that smells bad somehow, and it introduces a new keyword. :-(
Also, I would propose that ... else None should be implicit.
>>> print 'eeek' if pi == 3
None
But this example is giving me second thoughts about the whole idea.
People could easily be confused and misinterpret the syntax as:
<statement> if <cond> [ else <statement> ]
- Ken
More information about the Python-list
mailing list