On 3/25/07, Alan G Isaac <[EMAIL PROTECTED]> wrote: > On Sun, 25 Mar 2007, Bill Baxter apparently wrote: > > So if one just > > changes the example to > > reduce(lambda s, a: s * a.myattr, data, 1) > > How does one write that in a simplified way using generator > > expressions without calling on reduce? > > > Eliminating the expressiveness of ``reduce`` has in my > opinion never been publically justified.
Though the post on Guido's blog got lots of people jumping on the witch-burning bandwagon for getting rid of reduce(). I think I saw "good riddance" more than once. On the other hand slightly fewer people people said "hey I use that!" > > E.g., :: > > #evaluate polynomial (coefs=[an,...,a0]) at x > # using Horner's rule > def horner(coefs, x): > return reduce(lambda a1,a0: a1*x+a0, coefs) > > I suspect that ``reduce`` remains in danger only because the > math community has been too quiet. To be fair, the alternative is def horner2(coefs, x): ret = 0 for a in coefs: ret = ret*x + a return ret Which, though more typing, isn't really any harder or easier to read in my mind. But there is a difference in timings: In [107]: t1 = timeit.Timer('horner([4,3,2,1],2)','from __main__ import horner') In [108]: t2 = timeit.Timer('horner2([4,3,2,1],2)','from __main__ import horner2') In [111]: t1.timeit(), t2.timeit() Out[111]: (2.463477341393947, 1.1736731903077064) The explicit loop runs about twice as fast in this case. I think it's fine for filter()/reduce()/map() to be taken out of builtins and moved to a standard module, but it's not clear that that's what they're going to do. That py3K web page just says "remove reduce()... done". --bb _______________________________________________ Numpy-discussion mailing list Numpy-discussion@scipy.org http://projects.scipy.org/mailman/listinfo/numpy-discussion