[Python-ideas] PEP 505 -- None-aware operators
Gustavo Carneiro
gjcarneiro at gmail.com
Fri Oct 14 10:24:34 EDT 2016
On 14 October 2016 at 14:46, Franklin? Lee <leewangzhong+python at gmail.com>
wrote:
> On Oct 14, 2016 9:14 AM, "Gustavo Carneiro" <gjcarneiro at gmail.com> wrote:
> >
> > Sorry if I missed the boat, but only just now saw this PEP.
> >
> > Glancing through the PEP, I don't see mentioned anywhere the SQL
> alternative of having a coalesce() function: https://www.
> postgresql.org/docs/9.6/static/functions-conditional.
> html#FUNCTIONS-COALESCE-NVL-IFNULL
> >
> > In Python, something like this:
> >
> > def coalesce(*args):
> > for arg in args:
> > if arg is not None:
> > return arg
> > return None
> >
> > Just drop it into builtins, and voila. No need for lengthy discussions
> about which operator to use because IMHO it needs no operator.
> >
> > Sure, it's not as sexy as a fancy new operator, nor as headline
> grabbing, but it is pretty useful.
>
> That function is for a different purpose. It selects the first non-null
> value from a flat collection. The coalesce operators are for traveling down
> a reference tree, and shortcutting out without an exception if the path
> ends.
>
> For example:
> return x?.a?.b?.c
>
>From what I can read in the PEP, it attacks 3 different problems at once:
1. The " null -coalescing" operator is a binary operator that returns its
> left operand if it is not null . Otherwise it returns its right operand.
> 2. The " null -aware member access" operator accesses an instance member
> only if that instance is non- null . Otherwise it returns null . (This is
> also called a "safe navigation" operator.)
> 3. The " null -aware index access" operator accesses an element of a
> collection only if that collection is non- null . Otherwise it returns null
> . (This is another type of "safe navigation" operator.)
I am proposing a coalesce() function as alternative for (solely) problem 1,
while you are talking about problem 2.
I do believe problems 2 and 3 are interesting too, and of course coalesce()
does not work for them, they do need their own operators.
Sorry, I was a bit confused by the PEP attacking 3 (related) problems at
once.
Thanks.
--
Gustavo J. A. M. Carneiro
Gambit Research
"The universe is always one step beyond logic." -- Frank Herbert
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/python-ideas/attachments/20161014/52199b98/attachment.html>
More information about the Python-ideas
mailing list