[Python-ideas] Null coalescing operators

Ron Adam ron3200 at gmail.com
Mon Sep 21 17:28:22 CEST 2015

On 09/20/2015 11:57 PM, Chris Angelico wrote:
> On Mon, Sep 21, 2015 at 2:52 PM, Sven R. Kunze<srkunze at mail.de>  wrote:
>> >I limit myself to materializing default arguments as in:
>> >
>> >def a(b=None):
>> >     b = b or {}
>> >     ...
> As long as you never need to pass in a specific empty dictionary,
> that's fine. That's the trouble with using 'or' - it's not checking
> for None, it's checking for falseness.

 From reading these, I think the lowest-level/purest change would be to 
accommodate testing for "not None".  Something I've always thought 
Python should be able to do in a nicer more direct way.

We could add a "not None" specific boolean operators just by appending ! 
to them.

     while! x:    <-->   while x != None:
     if! x:       <-->   if x != None:

     a or! b      <-->   b if a != None else a
     a and! b     <-->   a if a != None else b
     not! x       <-->   x if x != None else None

Those expressions on the right are very common and are needed because of 
None, False, and 0, are all False values.

It would make for much simpler expressions and statements where they are 
used and be more efficient as these are likely to be in loops going over 
*many* objects.  So it may also result in a fairly nice speed 
improvement for many routines.

While the consistency argument says "if!" should be equivalent to "if 
not", I feel the practicality argument leans towards it being specific 
to "if obj != None".

I believe testing for "not None" is a lot more common than testing for 
"None".  Usually the only difference is how the code is arranged.

I like how it simplifies/clarifies the common cases above.  It would be 
especially nice in comprehensions.


More information about the Python-ideas mailing list