Python高阶函数详解:map、reduce与filter实战指南
本文深入解析Python中的高阶函数概念,通过实例演示map、reduce和filter三大内置函数的具体用法。文章详细说明了如何将函数作为参数传递,并展示了如何利用map进行元素映射、reduce进行累积计算以及filter进行条件过滤,帮助开发者掌握Python函数式编程的核心技巧。
Python高阶函数详解:map、reduce与filter实战指南
本文要点
1.什么是高阶函数
2.python中有哪些常用的高阶函数
什么是高阶函数?
什么是高阶函数?
在深入理解高阶函数之前,我们先通过几个简单示例来建立直观认识。在Python中,万物皆对象,函数同样被视为对象。以内置的求绝对值函数abs为例,我们可以定义一个变量f并将其指向abs函数。此时,调用f()的效果与直接调用abs()完全一致,这证明了变量可以指向函数。

进一步地,如果我们执行abs = len,即将变量abs重新指向求长度函数len,那么abs就不再代表求绝对值的功能,而是指向求长度。这一现象表明,函数名本质上就是指向函数对象的变量。

既然变量可以指向函数,且函数的参数可以接收变量值,那么逻辑上自然可以推导出:一个函数能够接收另一个函数作为其参数。下面我们通过一个具体示例来验证这一点。我们定义一个名为add的函数,它接收三个参数:x、y和f。其中x和y为数值类型,而f则是一个函数对象。
def add(x, y, f):
return f(x) + f(y)
result = add(-12, -98, abs)
print(result)
输出结果:110
上述add()函数的定义即为典型的高阶函数。其核心概念十分直观:只要一个函数能够接收其他函数作为参数,该函数即可被归类为高阶函数。
python中常用的高阶函数
python中常用的高阶函数
1.map()
1.map()
map()是Python内置的高阶函数之一,它接受一个处理函数f和一个列表list作为参数。其工作机制是将函数f依次作用于列表中的每一个元素,最终生成并返回一个新的列表。
例如,针对列表 list [1, 2, 3, 4, 5, 6, 7, 8, 9]
若希望将该列表中每个元素转换为平方值,可以调用 map() 函数:
因此,只需传入定义好的函数 f(x)=x * x,即可借助 map() 函数完成上述计算任务:
def add(x, y, f):
return f(x) + f(y)
result = add(-12, -98, abs)
print(result)
输出结果:
[1, 4, 9, 16, 25, 36, 49, 64, 81]
需要注意的是,map()函数不会修改原始列表,而是返回一个包含处理结果的新列表。
由于列表中的元素可以是任意数据类型,map()不仅适用于数值列表,还适用于包含其他类型元素的列表。只要传入的处理函数f能够处理该数据类型,map()即可正常工作。
2.reduce()
2.reduce()
reduce()函数的参数结构与map()类似,均接收一个函数f和一个列表list。然而,其行为与map()存在显著差异:reduce()传入的处理函数f必须接收两个参数。该函数会对列表中的元素进行反复迭代调用,最终返回一个累积计算的结果值。
下面我们通过一个具体示例进行说明:
def prod(x, y):
return x * y
print(reduce(prod, [2, 4, 5, 7, 12]))
输出结果:3360
其中prod()函数接收两个参数,并返回这两个参数的乘积。
当执行调用 reduce(prod, [2, 4, 5, 7, 12]) 时,reduce函数的计算过程如下:
首先计算前两个元素prod(2, 4),得到结果8,
接着将上一步的计算结果与第3个元素结合,调用prod(8, 5),得到结果40,
随后将当前结果与第4个元素结合,调用prod(40, 7),得到结果280,
最后将当前结果与第5个元素结合,调用prod(280, 12),得到结果3360,
由于列表中已无更多元素,最终返回结果3360。
此外,reduce()函数还支持接收第3个可选参数,用于指定计算的初始值。若将初始值设定为100,计算过程如下:
reduce(prod, [2, 4, 5, 7, 12], 100)
此时结果变为:336000,因为第一轮计算逻辑调整为:
计算初始值与第一个元素的乘积:prod(100, 2),得到结果200。
3.filter()
3.filter()
filter()函数也可称为过滤函数,它接收一个处理函数f和一个列表list。该处理函数f的作用是对列表中的每个元素进行条件判断,返回True或False。filter()根据判断结果自动剔除不符合条件的元素,并返回由符合条件元素组成的新列表。
例如,若要从列表 [1, 4, 6, 7, 9, 12, 17]中移除偶数并保留奇数,首先需要编写一个用于判断奇数的函数:
def is_odd(x):
if x % 2 == 1:
return x
随后使用filter()对列表进行过滤操作:
print(list(filter(is_odd, [1, 4, 6, 7, 9, 12, 17])))
结果:[1, 7, 9, 17]
借助filter(),可以实现多种实用的过滤功能,例如删除None值或空字符串:
def is_not_empty(s):
return s and len(s.strip()) > 0
print(list(filter(is_not_empty, ['test', None, '', 'str', ' ', 'END'])))
以上就是详解Python高阶函数的详细内容,更多关于Python高阶函数的资料请关注本站其它相关文章!
本站声明
本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。













