On 24/07/18 00:39, Chris Angelico wrote: > On Tue, Jul 24, 2018 at 8:22 AM, Thomas Jollans <t...@tjol.eu> wrote: >> On 18/07/18 19:43, Steve Dower wrote: >>> When a ``None``-aware operator is present, the left-to-right evaluation >>> may be >>> short-circuited. For example, ``await a?.b(c).d?[e]`` is evaluated:: >>> >>> _v = a >>> if _v is not None: >>> _v = _v.b >>> _v = _v(c) >>> _v = _v.d >>> if _v is not None: >>> _v = _v[e] >>> await _v >> >> ## NB I only skimmed most of this thread after reading the PEP, so I ## >> ## apologize if this has been discussed before and I missed it. ## >> >> I quite like the general idea, but I'm nervous about a rather >> fundamental aspect: This adds a special case in which you can't add >> parentheses to an expression involving a chain of operators to make >> precedence and evaluation order clear. >> >> To use your example, >> a ?? 2 ** b ?? 3 === (a ?? 2) ** (b ?? 3) # fine >> >> In the present day, >> a or 2 + 3 * c() === a or (2 + (3 * (c()))) >> >> a.b(c).d[e] === (((a.b)(c)).d)[e] # silly, but true. >> >> Short-circuiting doesn't break this. With and and or, the expression >> that's short-circuited away is a self-contained expression in imagined >> (or actual) parentheses. > > What about: > > 5 < x < 10 > > Can you add parentheses to that to "make precedence and evaluation order > clear"?
Well, no. TJ wrote: > [...] becomes one single, long, atomic expression, > just like a comparison chain. [...] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ This does leave the question, > Is introducing the idea of an "attribute reference, call and > subscription" chain worth it? _______________________________________________ Python-ideas mailing list Python-ideas@python.org https://mail.python.org/mailman/listinfo/python-ideas Code of Conduct: http://python.org/psf/codeofconduct/