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/