On Sun, May 13, 2018 at 12:06 PM Steven D'Aprano <st...@pearwood.info> wrote:
> On Sat, May 12, 2018 at 08:06:02PM -0400, Neil Girdhar wrote: > > On Sat, May 12, 2018 at 2:28 PM Steven D'Aprano <st...@pearwood.info> > wrote: > > > > > * there are no difficult mental questions about evaluation order, > e.g., > > > > in a bracketed expression having multiple assignments. > > > > > > Aren't there just? > > > > > > x = 1 > > > print( x + x given x = 50 ) > > > > > > > > > Will that print 100, or 51? Brackets ought to make it clearer: > > > > > > (x + x given x = 50) # this ought to return 100 > > > x + (x given x = 50) # this ought to return 51 > > > > > > but if I leave the brackets out, I have no idea what I'll get. > > > > > > > It has to be 100, or else outer parentheses change how an expression is > > evaluated. > > Whether that it right or wrong, you're missing the point. You said that > we don't have to care about evaluation order. But we do: even if your > analysis is correct, not everyone will realise it. I didn't. > I think the way to think about "given" is the same way you think about "for" and "if" clauses: (x + x for x in it) (x + x if condition else y) (x + x where x = f(y)) > > And I still don't, because I think your analyse is wrong. > > "Outer parentheses" is a red herring. I should have written: > > (x + x) given x = 50 # this ought to return 100 > x + (x given x = 50) # this ought to return 51 > > and now there are no outer parentheses to worry about. The question is > now whether "given" binds more tightly than + or not. > > We get to choose the precedence, and whatever we choose, it will > surprise (or annoy) some people, and more importantly, some people > simply won't know, and will have to ponder the difficult question of > what the evaluation order is. > This is already true today with code that has side-effects. I can > simulate "given" using exec. It only works in the module scope: > > # another_expr given target = expr > exec("target = expr") or another_expr > > but now we can see how precedence makes a real difference: > > x = 1 > x + (exec("x = 50") or x) > > versus: > > x = 1 > exec("x = 50) or (x + x) > > > Regardless of which behaviour we choose, some people won't know it and > will have to deal with "difficult mental questions about evaluation > order". > > That's unavoidable, regardless of how we spell it, := or "given". > > -- > Steve > _______________________________________________ > Python-ideas mailing list > Python-ideas@python.org > https://mail.python.org/mailman/listinfo/python-ideas > Code of Conduct: http://python.org/psf/codeofconduct/ > > -- > > --- > You received this message because you are subscribed to a topic in the > Google Groups "python-ideas" group. > To unsubscribe from this topic, visit > https://groups.google.com/d/topic/python-ideas/CFuqwmE8s-E/unsubscribe. > To unsubscribe from this group and all its topics, send an email to > python-ideas+unsubscr...@googlegroups.com. > For more options, visit https://groups.google.com/d/optout. >
_______________________________________________ Python-ideas mailing list Python-ideas@python.org https://mail.python.org/mailman/listinfo/python-ideas Code of Conduct: http://python.org/psf/codeofconduct/