本文主要介绍python高阶函数的相关资料,帮助你更好的理解和学习Python。感兴趣的朋友可以了解一下。
本文要点
1.什么是高阶函数?
2.2.python中常用的高阶函数有哪些?
什么是高阶函数?
在我们知道什么是高阶函数之前,我们先来看几个小例子。我们都知道在python中一切都是对象,函数也不例外。比如求绝对值函数abs,我们可以用一个变量F指向abs函数,这样调用F()的时候就可以得到和abs()一样的效果,说明变量是可以指向函数的!
同理,如果我们把abs指向另一个函数abs=len,那么abs就不再是求绝对值的函数,而是abs指向求长度的len函数。说明函数名其实是一个指向函数的变量!
既然变量可以指向函数,而函数的参数可以接收变量。也就是说,一个函数可以接收另一个函数作为参数。让我们来看一个演示。定义一个add函数,它接受三个参数x,y和f,其中x,y是数字,f是函数。
def add(x,y,f):
返回f(x) f(y)
结果=相加(-12,-98,绝对值)
打印(结果)
产量:110
上面的add()函数是一个高阶函数。其实高阶函数的概念很简单。可以接收函数作为参数的函数是高阶函数。
python中常用的高阶函数
1.map()
Map()是Python内置的高阶函数。它接收一个函数f和一个列表,通过将函数f依次作用于列表的每个元素,它得到一个新的列表并返回它。
例如,对于列表[1,2,3,4,5,6,7,8,9]
如果您想对列表中的每个元素求平方,可以使用map()函数:
所以我们只需要传入函数f(x)=x * x,就可以使用map()函数来完成这个计算:
def add(x,y,f):
返回f(x) f(y)
结果=相加(-12,-98,绝对值)
打印(结果)
输出结果:
[1, 4, 9, 16, 25, 36, 49, 64, 81]
注意:map()函数不改变原来的列表,而是返回一个新的列表。
由于列表中包含的元素可以是任何类型,map()不仅可以处理只包含数值的列表,事实上它可以处理包含任何类型的列表,只要传入函数f可以处理这种数据类型。
2.reduce()
reduce()函数接收类似于map()的参数,一个函数f和一个列表,但是它的行为与map()不同。reduce()传入的函数f必须接收两个参数,reduce()对列表的每个元素重复调用函数f并返回最终结果值。
让我们来看一个演示:
定义产品(x,y):
返回x * y
打印(reduce(prod,[2,4,5,7,12])
产量:3360
prod()函数接受两个参数,并返回x和y的乘积。
当调用reduce(prod,[2,4,5,7,12])时,reduce函数将执行以下计算:
先计算前两个元素prod(2,4),结果是:8,
然后把计算结果和第三个元素传到prod(8,5),结果是:40,
然后把计算结果和第四个元素传到prod(40,7),结果是:280,
然后将计算结果和第五元素传递给prod(280,12),结果为:3360,
由于没有更多的元素,最终结果是3360。
Reduce()也可以接收第三个可选参数作为计算的初始值。如果初始值设置为100,则计算:
减少(生产,[2,4,5,7,12],100)
结果变成:336000,因为第一轮计算是:
计算初始值和第一个元素:prod(100,2),结果是:200。
3 .过滤器()
Filter()也可以称为过滤函数。它接收一个函数f和一个列表。函数f判断每个元素并返回True或False。Filter()根据判断结果自动过滤掉不合格的元素,返回一个由合格元素组成的新列表。
比如从一个列表[1,4,6,7,9,12,17]中删除偶数,保留奇数,首先写一个判断奇数的函数:
def is_odd(x):
如果x % 2==1:
返回x
然后用filter()过滤出偶数:
打印(列表(filter(is_odd,[1,4,6,7,9,12,17]))
结果:[1,7,9,17]
使用filter(),您可以完成许多有用的功能,例如不删除任何字符串或删除空字符串:
定义不是空的:
返回s和len(s.strip()) 0
打印(列表(过滤器(is_not_empty,['test ',None,'',' str ',' ',' END']))
以上是Python高阶函数的详细讲解。关于Python高阶函数的更多信息,请关注我们的其他相关文章!
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。