我是Python新手,剛剛學習語法和各種函數。我想知道如果Python中的因子函數
x=reduce((lambda x,y: x*y) , [x for x in range(5) if x > 0])
是一個正確的函數來計算數的階乘?
親切的問候
我是Python新手,剛剛學習語法和各種函數。我想知道如果Python中的因子函數
x=reduce((lambda x,y: x*y) , [x for x in range(5) if x > 0])
是一個正確的函數來計算數的階乘?
親切的問候
沿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)
簡稱:
x = reduce(lambda x,y: x*y, range(1,5))
短,取而代之的是拉姆達:
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
def factorial(n):return reduce(lambda x,y:x*y,[1]+range(1,n+1))
更好:'reduce(lambda x,y:x * y,xrange(1,n + 1),1)' –
我使用def來定義函數factorial(n),所以每一行你需要做階乘函數,只需調用factorial(n),所以你避免寫你需要的每一行的reduce(lambda x,y:x * y,xrange(1,n + 1),1) – AlvaroAV
另一個使用遞歸方法:
def factorial(n):
if n == 0:
return 1
else:
return n*factorial(n-1)
無論如何,最好使用math.factorial。
東西線你新的編程或新到Python?你應該使用'math'模塊的'factorial'函數。 – hop