python中的高阶函数及其用法

如果⼀个函数的参数是另外⼀个函数,那么这个函数就可以称为⾼阶函数
1 map
map是系统内置函数,map函数接收两个参数,⼀个是函数,⼀个是可迭代对象
(Iterable),map将传⼊的函数依次作⽤到序列的每个元素,并把结果作为新的
Iterator返回。

"""
map(function,iterable)
参数1:function,函数,函数的参数个数取决于后⾯序列的个数
参数2:iterable,⼀个序列或多个序列
功能:将传⼊的函数依次作⽤于序列中的每⼀个元素,并把结果作为新的Iterator返
回
"""
#1.传⼊函数⼀个参数
def fun(x):
return x ** 2
#需求:获取⼀个列表中每个元素的平⽅,⽣成⼀个新的列表
l1 = map(fun,[1,2,3,4])
print(l1) #<map object at 0x000001E86D3DA6D8> #返回的是迭代器
print(list(l1)) #[1, 4, 9, 16] #将迭代器转换为迭代对象


#传⼊函数2个参数
l1 = [1,2,3,4]
l2 = [2,3,4,5,6,7]
def mul(x, y):
return x * y
#注意如果两个列表⻓度不⼀样,以短的为主计算,函数是平⾏取值,也就是说x取l1的
值,y取l2的值
gen1 = map(mul,l1,l2) #可以使⽤lambda表达式
print(list(gen1)) #[2, 6, 12, 20]
#提取字典的键
gen3 = map(lambda x:int(x),{'1':10,'2':20})
print(list(gen3)) #[1,2]
#元组
gen4 = map(lambda x,y:(x,y),[1,2,3,4,5],[1,2,3])
print(list(gen4)) #[(1, 1), (2, 2), (3, 3)]

2.reduce

reduce()函数也是functools模块中的⼀个⾼阶函数。需要引⼊functools模块才能
使⽤。

'''
functools.reduce(f, iterable[, initializer])
参数1:函数,这个函数需要两个参数。
参数2:可迭代对象
参数3:可选,是默认值
返回值:f函数计算的结果
'''
from functools import reduce
#1.累加求和
def add(x,y)
return x + y
print(reduce(f,[1,2,3,4,5],5))
计算过程:
(1)a = f(1,2) #将1赋值给x,2赋值给y
(2)a = f(a,3) #a赋值给x,3赋值给y
(3)a = f(a,4)
(4)a = f(a,5)
(5)f(d,10) = 20
#将序列变成整数
print(reduce(lambda x,y:x*10+y,[9,0,7,8])) #9078

3 filter
filter是内建函数,可以对可迭代对象进⾏过滤,去除不满⾜条件的元素

filter(function, iterable)
参数: function 确定是否保留元素,为真保留,为假去除元素,function的值可以
None
iterable 可迭代对象
返回值:⼀个新的迭代器或迭代对象
#1 过滤掉⾮字符串数据
print(filter(lambda x:isinstance(x,str),['1',8,'2',3,True,0.9]))
等价于:
[s for s in ['1',8,'2',3,True,0.9] if isinstance(s,str)]
#2 回⽂数
#回⽂数判断
def is_palindrome(n):
l1 = list(str(n)) #将数字转换为字符串,再将字符串转为列表
l2 = l1[::-1] #获取反向列表
if l1 == l2: #列表⽐较,⻓度相同,每⼀个元素都相同则为真
return True
return False
#找出1-1000内所有的回⽂数
print(list(filter(is_palindrome,range(1,1001))))

reduce和filter均要求第二个参数为可迭代对象

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值