
On Sun, Oct 31, 2021 at 7:10 PM Steven D'Aprano <steve@pearwood.info> wrote:
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 :-)
My current implementation uses the two-pass system, but only because that's simpler to code. Philosophically, I would prefer a one-pass system. What I will say is: I'm not going to lock the language into the two-pass system, and other Python implementations, or future versions of CPython, should be free to go one-pass. In any case, I have yet to see any examples that depend on two-pass that I wouldn't have rejected in code review. ChrisA