Python内置函数目录:
- map()
- filter()
- reduce()
- lambda()
map()
num_l=[1,2,10,5,3,7] res=map(lambda x:x+1,num_l) ##res 得到的是 <map object at 0x000002A365360240> map()处理得到的是一个迭代器,只能使用一次 # # for i in res: # # print(i) print(list(res))
总结:
""" 总结: map([函数],[参数]) # 函数可以是def 自定义的,也可以是lambda,参数要是可迭代对象(字符串、列表、元组、字典) """
# lambda x:x+1 def add_one(x): return x+1 # # #lambda x:x-1 def reduce_one(x): return x-1 # # #lambda x:x**2 def pf(x): return x**2 """终极版本,map()函数内部机制""" num_l=[1,2,10,5,3,7] def map_test(func,array): #func=lambda x:x+1 arrary=[1,2,10,5,3,7] ret=[] for i in array: res=func(i) #add_one(i) ret.append(res) return ret print(map_test(lambda x:x+1,num_l)) res=map(lambda x:x+1,num_l) print('内置函数map,处理结果',res) #<map object at 0x000002A365360240> map()处理得到的是一个迭代器,只能使用一次 # # for i in res: # # print(i) print(list(res)) print('传的是有名的函数',list(map(reduce_one,num_l))) # # msg='linhaifeng' print(list(map(lambda x:x.upper(),msg)))
filter()
""" 总结: filter(function or None, iterable) --> filter object #function 可以是def 自定义的函数名,也可以是lambda,符合过滤条件返回True 否则返回False , iterable 是可迭代对象,过滤掉可迭代对象每一项经过函数处理后的对象 返回一个列表地址,要用 list() 取出地址中的内容 """
#终极版本 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) #---->filter()函数 movie_people=['alex_sb','wupeiqi_sb','linhaifeng','yuanhao_sb'] res = filter(lambda n:not n.endswith('sb'),movie_people) #res 得到一个迭代器对象 print(res) #<filter object at 0x00000164321BCDA0> print(list(res)) ## 使用 list(res) 调用列表地址里的东西 # print(list(filter(lambda n:not n.endswith('sb'),movie_people))) # #直接打印出来 没赋值给变量保存下来,即在内存中开辟一块地方存下来了 但没有记录门牌号 打印之后就自动清除了
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) 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)
reduce()
""" 总结: reduce(function, iterable, initial=None) function 定义函数,iterable -- 可迭代对象 ,initial 初始值 默认为None ## reduce_test(func,array,init=None) """
""" 终极版本 -指定一个初始值""" 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,2)) """最后 引出 reduce函数""" from functools import reduce def add_num(x,y): return x+y num_l=[1,2,3,100] print(reduce(lambda x,y:x+y,num_l,3)) print(reduce(add_num,num_l))
# from functools import reduce """ 版本1:""" # num_l=[1,2,3,100] # res=0 # for num in num_l: # res+=num # # print(res) # num_l=[1,2,3,100] # def reduce_test(array): # res=0 # for num in array: # res+=num # return res # # print(reduce_test(num_l)) """版本2""" num_l=[1,2,3,100] def multi(x,y): return x*y # lambda x,y:x*y def reduce_test(func,array): res=array.pop(0) for num in array: res=func(res,num) return res print(reduce_test(multi,num_l)) print(reduce_test(lambda x,y:x*y,num_l)) """ 终极版本 -指定一个初始值""" 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,2)) """最后 引出 reduce函数""" from functools import reduce def add_num(x,y): return x+y num_l=[1,2,3,100] print(reduce(lambda x,y:x+y,num_l,3)) print(reduce(add_num,num_l)) """ 总结: reduce(function, iterable, initial=None) function 定义函数,iterable -- 可迭代对象 ,initial 初始值 默认为None ## reduce_test(func,array,init=None) """
lambda()
"""语法: lambda [形参]:[返回值] 注意:# lambda 匿名函数如果不赋值给变量,Python运行之后内存立即清空,若赋值给变量则与普通函数相同 """ # yy = lambda x:x**2 # print(yy(2)) # ff1 = lambda s:str(s)+"_sb" # print(ff1("alex")) """一般情况下 lambda 直接使用,不赋值给变量。与其他函数混合使用"""