递归函数的特点:
1,调用自身函数;
2,有一个结束条件;
3,但凡是递归可以写的,循环都可以实现;
4,递归的效率在很多时候会很低;
def f(n): if n == 1: return 1 return n*f(n-1)
斐波那契数列:
#循环实现 def fibo(n): before=0 after=1 for i in range(n-1): ret=before+after before=after after=ret return ret
#递归实现 def fibo_new(n):#n可以为零,数列有[0] if n <= 1: return n return(fibo_new(n-1) + fibo_new(n-2))
内置函数:
1, filter(function, sequence) :
对sequence中的item依次执行function(item),将执行结果为True的item做成一个filter object的迭代器返回。可以看作是过滤函数。
str = ['a', 'b','c', 'd'] def fun1(s): if s != 'a': return s ret = filter(fun1, str) print(list(ret))# ret是一个迭代器对象
2,map(function, sequence) :
对sequence中的item依次执行function(item),将执行结果组成一个map object迭代器返回.
str = [1, 2,'a', 'b'] def fun2(s): return s + "alvin" ret = map(fun2, str) print(ret) # map object的迭代器 print(list(ret))# ['aalvin', 'balvin', 'calvin', 'dalvin']
3,reduce(function, sequence, starting_value):
对sequence中的item顺序迭代调用function,如果有starting_value,还可以作为初始值调用.
from functools import reduce def add1(x,y): return x + y print (reduce(add1, range(1, 101)))
4,lambda
匿名函数的命名规则,用lamdba 关键字标识,冒号(:)左侧表示函数接收的参数(a,b) ,冒号(:)右侧表示函数的返回值(a+b)。
因为lamdba在创建时不需要命名,所以,叫匿名函数
#通过Reduce函数加lambda表达式式实现阶乘: from functools import reduce print (reduce(lambda x,y: x*y, range(1,6)))