Iteration for Factorials

Tim Chase python.list at
Mon Oct 22 22:22:47 CEST 2007

> def fact(x):
>     if x == 0 or x == 1:
>         return 1
>     else:
>         return reduce(operator.mul, xrange(1,x+1))

If obscurity is the name of the game,

   >>> from operator import mul
   >>> fact = lambda i: i > 1 and reduce(mul, xrange(1,i+1)) or i 
 >= 0 and 1 or None
   >>> for i in xrange(-2,10): print '%i! = %s' % (i, fact(i))

My eyes hurt after reading the order of operations is 
left to Python to discern (a few judiciously placed parens might 
improve things...though that may be like polishing coprolite)

I haven't yet seen an implementation in C (using the python/C 
interface) or anybody handing off a python AST/opcode-list to an 
appropriate function :)


More information about the Python-list mailing list