python 高阶,python函数高级用法

python 高阶,python函数高级用法,详解Python高阶函数

本文主要介绍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的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: