python高阶函数
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python高阶函数相关的知识,希望对你有一定的参考价值。
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‘)]
以上是关于python高阶函数的主要内容,如果未能解决你的问题,请参考以下文章