[Python-ideas] Leave off "else" in ternary expression

Sjoerd Job Postmus sjoerdjob at sjoerdjob.com
Fri Oct 28 15:41:09 EDT 2016


On Fri, Oct 28, 2016 at 11:28:16AM -0400, Todd wrote:
> The null-coalescing discussion made me think about the current ternary "x =
> a if b else c" expression.  In normal "if / else" clauses, the "else" is
> optional.  I propose doing the same thing with ternary expressions
> (although I don't know what the result would be called, a "binary
> expression"?)
> 
> The idea would be to allow this syntax:
> 
> x = a if b
> 
> Which would be equivalent to:
> 
> x = a if b else x
> 
> I think this would be useful syntax.  In particular, I see it being useful
> for default value checking, but can also be used to override the result of
> particular corner cases from functions or methods..

> _______________________________________________
> Python-ideas mailing list
> Python-ideas at python.org
> https://mail.python.org/mailman/listinfo/python-ideas
> Code of Conduct: http://python.org/psf/codeofconduct/

To me, it is completely un-intuitive that it would work like that. It
seems to parse as

    (x = a) if b

instead as

    x = (a if b)

That would make an assignment part of an expression, which seems very
un-Pythonic. We also do not have

    if (x = a): pass

When I first read your proposal, I assumed it would mean "use `None` as
default `else` expression". Upon reading it, I am quite certain that the
semantics you propose are not going to make it into Python. (But then
again, I'm not the BDFL).


More information about the Python-ideas mailing list