高阶函数、map函数、filter函数、reduce函数

#  高阶函数
# 把函数当做一个参数传递给另外一个函数
# def foo(n):
#     print(n)
#
# def bar(name):
#     print(name)
#
# foo(bar('lei'))
# lei
# None

# 返回值包含一个函数
# def foo():
#     print('foo1')
#     return bar
# def bar():
#     print('bar1')
# n = foo()
# n()
# foo1
# bar1

# map 函数
num_1 = [1,45,1,5,1,2,9]
num_2 = [3,4,5,61,5,6]
# def map_test(array):
#     ret = []
#     for i in array:
#         ret.append(i**2)
#     return ret
# ret = map_test(num_1)
# print(ret)

# def map_test(func,array):
#     ret = []
#     for i in array:
#         res = func(i)
#         ret.append(res)
#     return ret
# ret = map_test(lambda x:x+1,num_1)
# print(ret)  #  [2, 46, 2, 6, 2, 3, 10]
# ret1 = map_test(lambda x:x**2,num_1)
# print(ret1)  # [1, 2025, 1, 25, 1, 4, 81]

# res1 = map(lambda x:x+1,num_1)
# print(res1)  # <map object at 0x00000000023D1A20>
# print(list(res1))  # [2, 46, 2, 6, 2, 3, 10]
# 使用一次就会清空了再用for不会出信息 再用print互不干扰
# for i in res1:
#     print(i)
# filter 函数
movie = ['sb_1234','sb_245','3415']

# def file_test(array):
#     ret = []
#     for p in array:
#         if not p.startswith('sb'):
#             ret.append(p)
#     return  ret
# res = file_test(movie)
# print(res)  #  ['3415']

# def file_test(func,array):
#     ret = []
#     for p in array:
#         if not func(p):
#             ret.append(p)
#     return  ret
# res = file_test(lambda n:n.startswith('sb'),movie)
# print(res)  #  ['3415']

# movie = ['sb_1234','sb_245','3415']
# v = filter(lambda n:not n.startswith('sb'),movie)
# print(list(v))  # ['3415']
# from functools import reduce

# num_1 = [1,3,4,5]

# def reduce_test(func,array):
#     res = array.pop(0)
#     for num in array:
#         res = func(res,num)
#     return res
#
# print(reduce_test(lambda x,y:x*y,num_1))  # 60

# num_1 = [1,3,4,5]

# 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_1,100))  # 6000

# reduce 函数
from functools import reduce
num_1 = [1,2,3,4,5]
print(reduce(lambda x,y:x+y,num_1,10)) # 25
print(reduce(lambda x,y:x+y,num_1))    # 15
# 总结

# map() 处理序列中每个元素,得到’列表‘,需要list,元素个数位置不变

# filter() 遍历整个序列元素,判断每个元素布尔值,True则保留下来

# reduce 处理一个序列,进行合并操作
from functools import reduce
print(reduce(lambda x,y:x+y,range(1,100))) # 4950



posted @ 2018-10-21 22:04  文昌  阅读(82)  评论(0)    收藏  举报