
Guido van Rossum strung bits together to say:
I had a similar thought about 5 minutes after turning my computer off last night. The alternative I came up with was:
y = (from result = 0.0 do result += x**2 for x in values if x > 0)
I think you're aiming for the wrong thing here; I really see no reason why you'd want to avoid writing this out as a real for loop if you don't have an existing accumulator function (like sum()) to use.
One interesting thing is that I later realised that iterator comprehensions combined with the sum function would actually cover 90% of the accumulation functions I would ever write. So Raymond turns out to be correct when he suggests that generator expressions may limit the need for reduce functions and accumulation loops. With the sum() built in around, they will cover a large number of the reduction operations encountered in real life. Previously, sum() was not available, and even if it had been the cost of generating the entire list to be summed may have been expensive (if the values to be summed are a function of the stored values, rather than a straight sum). So while I think a concise reduction syntax was worth aiming for, I'm also willing to admit that it seems to be basically impossible to manage without violating Python's maxim of "one obvious way to do it". The combination of generator expressions and the various builtins that operate on iterables (especially sum()) is a superior solution. Still, I learned a few interesting things I didn't know last week :) Cheers, Nick. -- Nick Coghlan | Brisbane, Australia ICQ#: 68854767 | ncoghlan@email.com Mobile: 0409 573 268 | http://www.talkinboutstuff.net "Let go your prejudices, lest they limit your thoughts and actions."