On Sat, May 12, 2018 at 11:04:45PM -0400, Neil Girdhar wrote:
Another benefit of given compared with := that I just thought of is this. Suppose you have a generator like
(expression(f(x), y, z) for x in xs for y in ys(x) for z in zs(y))
With given notation you can optimize:
(expression(f_x, y, z) for x in xs given f_x = f(x) for y in ys(x) for z in zs(y))
whereas with :=, you can't.
Is that legal syntax? You're splitting the "given" expression by sticking the for clause in the middle of it. I don't think that will be legal. It would be trying to split an ternary if: (true_expr for x in xs if condition else false_expr for y in ys) (true_expr if condition for x in xs else false_expr for y in ys) But whether legal or not, Neil, you went on at length about how professionals don't write code like this and such overly dense comprehensions are only fit for competitions. Now you want your cake and to eat it too: "given is better, because it doesn't allow the awful unreadable code that := gives; oh, and it's also better, because it allows *this* awful unreadable code that := doesn't allow" In any case, of course you can write this with := binding expression. You just shouldn't do it: (expression(f_x, y, z) for x in xs for y in ys(x) for z in zs(y) if (f_x := f(x)) or True) ) That's fine for mucking about, but I wouldn't do it for serious code. Replacing the colon with "given f_x" doesn't change that. -- Steve