On 02.11.2016 17:17, Nick Coghlan wrote:
The gist is that rather than writing the bare:

    target = expr1 ?? expr2 ?? expr3

You'd instead write None-coalescing as:

    target = exists(expr1) ?? exists(expr2) ?? expr3

and None-propagating as:

    target = missing(expr1) ?? missing(expr2) ?? expr3

with ?? being a protocol-driven short-circuiting binary operator
controlled by the left operand rather than defining any particular
semantics of its own.

I am sorry that I had to read this twice to get what you mean.


The "obj?." and "obj?[]" would then be shorthand for particular uses
of "missing(obj) ?? ..." that avoid duplicate evaluation of the left
operand (as well as bypassing the overhead of actually creating a
"missing" instance).


That could work if we accept that ?. and ?[] is only about the left hand-side. However, as the ? visually applies also to the attribute/index access on the right, which means it could be a more readable way of doing

getattr(x, 'attr', None)
or
x[0] if len(x) > 0 else None

Imagine you need to work with incomplete data and do some chaining with the new syntax. As soon as one single attribute isn't there, we hit an exception. The same for index.

If the ?. and ?[] are introduced, I think applying the "non-existence" property also the right hand make sense here as well for a wide range of applications.


Best,
Sven
_______________________________________________
Python-ideas mailing list
Python-ideas@python.org
https://mail.python.org/mailman/listinfo/python-ideas
Code of Conduct: http://python.org/psf/codeofconduct/

Reply via email to