Python中的因子函数

时间:2013-10-21 09:53:38

标签: python

我是Python的新手,我只是学习语法和各种功能。我想知道是否

x=reduce((lambda x,y: x*y) , [x for x in range(5) if x > 0])

是计算数字阶乘的正确函数吗?

亲切的问候

5 个答案:

答案 0 :(得分:6)

http://www.willamette.edu/~fruehr/haskell/evolution.html

的某些内容
# beginner

def fac(n):
    f = 1
    i = 1
    while i <= n:
        f *= i
        i += 1
    return f

# advanced beginner

def fac(n):
    return n * fac(n - 1) if n > 1 else 1

# intermediate

def fac(n):
    return reduce(lambda x, y: x * y, range(1, n + 1))

# advanced intermediate

import operator
def fac(n):
    return reduce(operator.mul, xrange(1, n + 1))

# professional

import math
print math.factorial(5)

# guru

import scipy.misc as sc
print sc.factorial(5, exact=True)

答案 1 :(得分:4)

短:

x = reduce(lambda x,y: x*y, range(1,5))

更短,而不是lambda:

from operator import mul
x = reduce(mul, range(1,5))

或最短,来自数学模块(感谢跳跃):

from math import factorial
factorial(4) # range/xrange above does not include the upper value

答案 2 :(得分:3)

相当多 - 虽然如果你想要5 !,你应该range(6)。另外,一个小的风格问题:你应该用括号而不是括号括起你的生成器表达式,这样就不需要构造临时列表了。最后,if子句不是必需的 - 只需使用range的双参数版本。

答案 3 :(得分:1)

def factorial(n):return reduce(lambda x,y:x*y,[1]+range(1,n+1))

答案 4 :(得分:1)

使用递归的另一种方法:

def factorial(n):
    if n == 0:
        return 1
    else:
        return n*factorial(n-1)

无论如何,最好使用math.factorial