python高阶函数
python高阶函数有很多,我们这里主要介绍六种常用的高阶函数:
-
lambda()匿名函数,filter()筛选函数,map()函数,reduce()函数,zip()函数 ,sorted()函数
1.lambda()匿名函数
-
概念
-
是指一类无需定义标识符(函数名)的函数或子程序。
-
-
语法:
-
lambda 形参:返回值
-
-
解释
-
lambda 只是一个表达式,函数体比 def 简单很多
-
lambda的主体是一个表达式,而不是一个代码块。仅仅能在lambda表达式中封装有限的逻辑进去。
-
lambda 函数拥有自己的命名空间,且不能访问自己参数列表之外或全局命名空间里的参数。
-
-
示例:
#例一: sum = lambda a,b:a+b print(sum(10,20)) # 30 print(sum(20,30)) # 50 #例二: #对字典排序 infors = [{"name":"wang","age":18},{"name":"li","age":20},{"name":"qian","age":30}] infors.sort(key=lambda x:x['age']) #根据值对字典排序 print(infors) #例三: def test(a,b,func): result = func(a,b) return result num = test(11,22,lambda x,y:x+y) print(num) #33
2.filter()筛选函数
-
概念
-
filter() 函数是一个对于可迭代对象的过滤器,过滤掉不符合条件的元素,返回的是一个迭代器
-
-
语法
-
filter(function, iterable)
-
该函数接收两个参数,第一个为函数的引用或者None,第二个为可迭代对象
-
-
示例
#例一: def is_odd(n): return n % 2 == 1 alist = filter(is_odd, [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]) print(list(alist)) #[1, 3, 5, 7, 9] #例二: my_list=[1,2,'',3,4,'6',' '] new_list=list(filter(None,my_list)) print(new_list) #[1, 2, 3, 4, '6', ' '] #注:None 函数 过滤掉'' 而不是过滤掉空字符串
3.map()函数
-
概念
-
map()函数接收的是一个函数 f 和一个 list,并通过把函数 f 依次作用在 list 的每个元素上,得到一个新的 list 并返回。
-
-
语法
-
map(function, iterable, ...)
-
参数:function -- 函数,iterable -- 一个或多个序列
-
返回值:Python 2.返回列表。Python 3.返回迭代器。
-
-
解释
-
map()函数不改变原有的 list,而是返回一个新的 list
-
-
示例
#例一: lst=[1,2,3,4,5,6,7,8,9] def f(x): return x*x lst1=list(map(f,lst)) print(lst1) #例二:首字母大写,其他小写 def standard_name(s): A = s[0:1].upper() + s[1:].lower() return A lst = ['zHAngSan','LISi','wangwu','ZHAOLIU'] print(map(standard_name,lst)) for i in map(standard_name,lst): print(i) # <map object at 0x000000000296ABA8> # Zhangsan # Lisi # Wangwu # Zhaoliu
4.reduce()函数
-
作用
-
reduce()函数接收的参数和 map()类似,但是行为不同。reduce() 函数会对参数序列中元素进行累积
-
-
语法
-
reduce(function, iterable[, initializer])
-
参数:function -- 函数,有两个参数。iterable -- 可迭代对象。initializer -- 可选,初始参数
-
reduce()传入的函数 f 必须接收两个参数,用传给 reduce 中的函数 f(有两个参数)先对集合中的第 1、2 个元素进行操作,得到的结果再与第三个数据用 f 函数运算,最后得到一个结果
-
-
示例
#注意 :在python3中如果使用reduce需要先导入 #例一: from functools import reduce lst=[1,2,3,4,5,6] def sum(x,y): return x+y print(reduce(sum,lst)) #例二: from functools import reduce def f(a,b): return a+b s = reduce(f,[1,2,3,4],10) print(s) #1+2+3+4+10.这里的第三个参数是做为初始值的。
5.zip()函数
-
作用
-
zip函数接受任意多个可迭代对象作为参数,将对象中对应的元素打包成一个tuple,然后返回一个可迭代的zip对象 ,这个可迭代对象可以使用循环的方式列出其元素 ,若多个可迭代对象的长度不一致,则所返回的列表与长度最短的可迭代对象相同.
-
-
范例
a=zip([1,2,3],['a','b','c']) print(a) #<zip object at 0x00000000029DE9C8> print(list(a)) #[(1, 'a'), (2, 'b'), (3, 'c')] #上面其实可以看出一个打包的过程,对应的就有解包的方法,用'*'操作符可以实现解包: a=zip([1,2,3],['a','b','c']) print(list(zip(*a))) #[(1, 2, 3), ('a', 'b', 'c')] #注意,zip返回的本质是一个生成器,如果利用list,或其他方法迭代后,生成器就是空的 a=zip([1,2,3],['a','b','c']) print(list(a)) #[(1, 'a'), (2, 'b'), (3, 'c')] print(list(a)) #[] 因为上面已经把生成器使用了 #当传入的两个参数的长度不同是,按短的进行处理 a=zip([1,2,3,4],['a','b','c']) print(list(a)) #[(1, 'a'), (2, 'b'), (3, 'c')]