Yes, I have not read all the iterations of the PEP, and none of them extremely closely. I had thought it "obvious" that ':=' should have a very high operator precedence. But of course if it doesn't then expressions like the one I proposed could mean something quite different.
I find the third hand argument rather compelling. All those potentially required parentheses turn elegant looking code into an ugly mess. On Thu, Apr 12, 2018, 11:56 PM Tim Peters <tim.pet...@gmail.com> wrote: > [David Mertz <me...@gnosis.cx>] > > Yes, I should have added ternary expressions to if statements. I can > > definitely see the use there. > > > > However, your example is not null checking. You'd have to modify it > slightly > > to get that: > > > > None if var:= function() is None else var.method() > > > > Still not bad looking. > > I couldn't find text in the PEP spelling out precedence, but there are > two plausible ways that could be grouped: > > 1. None if (var:= function()) is None else var.method() > > which is what I believe you intended, and > > 2. None if var:= (function() is None) else var.method() > > which from earlier iterations of this thread I believe is the actual > meaning - but isn't at all what was intended. > > The most clearly related example in the PEP appears to be: > > x = "default" if (eggs := spam().ham) is None else eggs > > which forced the intended meaning as in #1 above. > > While "assignment" is currently a statement type rather than "an > operator", viewing the current situation as if "=" were an operator it > has very low precedence, so it would be just as surprising at times to > boost the precedence of ":=": > > if x := i+1: > > That is, in _that_ example, > > if x := (i+1): > > is "clearly intended", not the more tightly binding > > if (x ;= i) + 1: > > On the third hand, requiring parentheses all the time would also feel > strained: > > while m := someregexp.match(somestring): > > is already impossible to misread. > > Annoying ;-) >
_______________________________________________ Python-ideas mailing list Python-ideas@python.org https://mail.python.org/mailman/listinfo/python-ideas Code of Conduct: http://python.org/psf/codeofconduct/