[Python-ideas] PEP 505: None-aware operators: operators ?= and ?? and OR

Terry Reedy tjreedy at udel.edu
Thu Jul 19 15:23:01 EDT 2018


On 7/19/2018 8:30 AM, Jonathan Fine wrote:
> Hi
> 
>> There is a formatted version of this PEP at
>> https://www.python.org/dev/peps/pep-0505/
> 
> I've taken a look at this, and have some comments on the first two
> examples drawn from standard library code. (And a very grateful +10
> for writing a script to find such examples.)
> 
> I've started a subthread, just to discuss the ?= and ?? operators. And
> something newish, that I call OR.
> 
> FIRST EXAMPLE
> The first example is
> ---
>  From bisect.py:
> def insort_right(a, x, lo=0, hi=None):
>      # ...
>      if hi is None:
>          hi = len(a)
> ---
> 
> Here, None is a sentinel value. The simpler code
> ---
>    hi = hi or len(a)
> ---
> fails when hi is zero (or any other value that is False in the boolean context).
> 
> This can be fixed by introducing a new operator OR which is similar to
> 'or' but has the semantics this example requires. Thus, given OR we
> can write
> ---
>    hi = hi OR len(a)

Antoine Pitrou proposed the same thing, using the existing 'else' as the 
spelling.  'hi else len(s)' abbreviates the existing
'hi if hi is not None else len(s)'.
with the boilerplate 'if x is not None' removed.

> ---
> where (A OR B) returns A if A is not None, otherwise it returns B.
> 
> (Recall that (A or B) returns A if bool(A), otherwise it returns B.)

To make the parallel more obvious, (A or B) also abbreviates
tem = A; tem if bool(tem) is not False else B

-- 
Terry Jan Reedy



More information about the Python-ideas mailing list