y=x!=1*2*3*……*x
1. 循环实现
def f(n):
m = 1
for i in range(n+1):
m *= i
return m
或
def f(n):
m=1
while n>1:
m=m*n
n-=1
return m
print f(5)
2. 递归实现
def f(n):
if n>1:
return n*f(n-1)
else:
return 1
print f(5)
或
def f(n):
p = 1
if n > 1:
p = n*f(n-1)
print p
return p
print f(5)
3. reduce方法
def foo(n):
return reduce(lambda x,y: x*y, range(1,n+1))
reduce函数:解析
python中的reduce内建函数是一个二元操作函数,他用来将一个数据集合(链表,元组等)中的所有数据进行下列操作:用传给reduce中的函数 func()(必须是一个二元操作函数)先对集合中的第1,2个数据进行操作,得到的结果再与第三个数据用func()函数运算,最后得到一个结果。
def myadd(x,y):
return x+y
sum=reduce(myadd,(1,2,3,4,5,6,7))
print sum
#结果就是输出1+2+3+4+5+6+7的结果即2
当然,也可以用lambda的方法,更为简单:
sum=reduce(lambda x,y:x+y,(1,2,3,4,5,6,7))
print sum
lambda 变量名:表达式
ps:有个列表:['a.b.c.d11u.e.f.g', 'e.f88.g', 'caa3.z.brr', 'z.48.ff.ee']。需要找节点最多的一个(节点间由.分割)。看似简单的工作,要用pythonic的方法来做,还是要对python的内置函数有一定程度的熟悉,比如这里可以用最熟悉不过的max,但是会用到它并不常用的可选参数:key
node_list = ['a.b.c.d11u.e.f.g', 'e.f88.g', 'caa3.z.brr', 'z.48.ff.ee']
max_node = max(node_list, key=lambda n: n.count('.'))
在这里,使用key参数改变了max比较列表元素的方法,达到了完成任务的目的