# reduce()--what is it good for?

Anton Vredegoor anton at vredegoor.doge.nl
Sat Nov 8 14:36:19 CET 2003

```Alex Martelli <aleaxit at yahoo.com> wrote:

>Of course you can memoize any pure function of hashable args.  But
>memoizing a recursive implementation of factorial has a nice property,
>shared by other int functions implemented recursively in terms of their
>values on other ints, such as fibonacci numbers: the memoization you do for
>any value _helps_ the speed of computation for other values.  This nice
>property doesn't apply to non-recursive implementations.

Maybe we need a better example because it is possible to use reduce on
a function which has side effects.

Anton.

class _Memo:
biggest = 1
facdict = {0 : 1, 1 : 1}

def fac(n):
def mymul(x,y):
res = x*y
_Memo.facdict[y] = res
_Memo.biggest = y
return res
def factorial(x):
b = _Memo.biggest
if x > b: return reduce(mymul, xrange(b+1,x+1), b)
return _Memo.facdict[x]
return factorial(n)

def test():
print fac(5)

if __name__=='__main__':
test()

```

More information about the Python-list mailing list