返回顶部

day16__高阶函数

匿名函数:

  lambda

   lambda x:x+1

  func = lambda x:x+1
  print(func(10))

  

       

 高阶函数

  满足俩个特性任意一个即为高阶函数

    1.函数的传入参数是一个函数名

    2.函数的返回值是一个函数名

 

map:

num_l=[1,2,10,5,3,7]

#lambda x:x+1
def add_one(x):
    return  x+1

#lambda x:x-1
def reduce_one(x):
    return x-1

def map_test(func,array):
    ret = []
    for i in num_l:
        res = func(i)
        ret.append(res)
    return ret

print(map_test(add_one,num_l))         #[2, 3, 11, 6, 4, 8]
print(map_test(lambda x:x+1,num_l))    #[2, 3, 11, 6, 4, 8]

  

num_l=[1,2,10,5,3,7]
res=map(lambda x:x+1,num_l)    #[2, 3, 11, 6, 4, 8]


msg='linhaifeng'
print(list(map(lambda x:x.upper(),msg)))  # ['L', 'I', 'N', 'H', 'A', 'I', 'F', 'E', 'N', 'G']

  

 

filter:

 

movie_people=['sb_alex','sb_wupeiqi','linhaifeng','sb_yuanhao']

def filter_test(array):
    ret=[]
    for p in array:
        if not p.startswith('sb'):
               ret.append(p)
    return ret

res=filter_test(movie_people)
print(res)    #['linhaifeng']

 

movie_people=['alex_sb','wupeiqi_sb','linhaifeng','yuanhao_sb']
def sb_show(n):
    return n.endswith('sb')

def filter_test(func,array):
    ret=[]
    for p in array:
        if not func(p):
               ret.append(p)
    return ret

res=filter_test(sb_show,movie_people)
print(res)     #['linhaifeng']

  

#终极版本
movie_people=['alex_sb','wupeiqi_sb','linhaifeng','yuanhao_sb']
def sb_show(n):
    return n.endswith('sb')
#--->lambda n:n.endswith('sb')

def filter_test(func,array):
    ret=[]
    for p in array:
        if not func(p):
               ret.append(p)
    return ret

res=filter_test(lambda n:n.endswith('sb'),movie_people)
print(res)  #['linhaifeng']

  

#filter函数
movie_people=['alex_sb','wupeiqi_sb','linhaifeng','yuanhao_sb']
print(filter(lambda n:not n.endswith('sb'),movie_people))  #<filter object at 0x0000000002252C88>

  

 

movie_people=['alex_sb','wupeiqi_sb','linhaifeng','yuanhao_sb']

res=filter(lambda n:not n.endswith('sb'),movie_people)
print(list(res))  #['linhaifeng']

print(list(filter(lambda n:not n.endswith('sb'),movie_people))) # ['linhaifeng']

  

reduce:

num_l=[1,2,3,100]
def reduce_test(func,array,init=None):
    if init is None:
        res=array.pop(0)
    else:
        res=init
    for num in array:
        res=func(res,num)
    return res

print(reduce_test(lambda x,y:x*y,num_l,100))  #60000


#reduce函数
from functools import reduce
num_l=[1,2,3,100]
print(reduce(lambda x,y:x+y,num_l,1))   #107
print(reduce(lambda x,y:x+y,num_l))     #106
#print(reduce(function,sequence,initial))   #函数,序列,初始值

  

 

posted on 2018-05-14 11:11  augustyang  阅读(256)  评论(0编辑  收藏  举报

导航