On Tue, Oct 26, 2021 at 08:59:51AM +0100, Rob Cliffe via Python-ideas wrote:
> And I don't understand what point you're making here. Yes, the walrus
> operator can appear in various places, how is that relevant? You could write
> def f(a := (b := c)):
> which might be a tad confusing but would be unambiguous and legal, just as
> def f(a = (b := c)):
> is currently legal (I tested it). I don't see a clash.
If we have a choice between a dozen syntax variants that are not
confusing, and one which is confusing, why would we prefer to pick the
one that is confusing over any of the others?
> Perhaps I wasn't clear. When I said 'inefficiency', I meant to refer to
> cases like
> def f(a := b+1, b := e+1, c := a+1, d := 42, e := d+1)
> where late-binding defaults are allowed to refer to subsequent
> arguments. Here Python has to work out to assign first to d, then e,
> then b, then a, and finally c, which AFAICS requires multiple passes.
No, I don't think we need to do anything that intricate. It is not the
responsibility of the interpreter to **make it work** no matter what,
any more than we expect the interpreter to make this work:
a = b + 1
b = e + 1
c = a + 1
d = 42 # <<<<<-----start here
e = d + 1
It is enough to have a simple rule:
- bind early bound defaults left to right first;
- bind late bound defaults left to right next.
(That's my preference.) Even simpler would be a strictly left-to-right
single pass but that would be, I think, too simple. YMMV. I'm not
prepared to fight to the death over that one :-)
--
Steve
_______________________________________________
Python-ideas mailing list -- [email protected]
To unsubscribe send an email to [email protected]
https://mail.python.org/mailman3/lists/python-ideas.python.org/
Message archived at
https://mail.python.org/archives/list/[email protected]/message/QH4IRAPKOW333P4QLVVQM2PQ32TVL33T/
Code of Conduct: http://python.org/psf/codeofconduct/