python(七)高阶函数,匿名函数

本文深入探讨了Python中的高阶函数概念,包括函数作为变量、传递及返回函数,并介绍了filter和sorted函数的应用实例。此外,还讲解了lambda匿名函数及其在reduce函数中的使用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1,高阶函数

还记得第一篇中我这么说:python中的对象不是以变量为准,而是以“字符串”为准。

那这里的“字符串”的含义可以是数字、字符串、列表、元组、集合、字典等python中所允许的任意的数据类型。

函数,可以看做是python中一种特殊的数据类型。因此我可以这么说:定义函数的过程,其实是声明了一个特殊的变量,这个变量指向了内存中的一段代码,这段代码就是我们定义的函数。

所以可以得出结论:python中函数名称也是变量。请看这个示例:

133611_TIsH_1156660.png

那所谓的高阶函数,其实就是为了阐明这个道理,同时还强调了一点就是,既然函数名称是变量,那么变量是可以传递到函数内部的,所以函数名也可以传递到函数内部,也就是说:一个函数是可以接受另外一个函数作为参数的。

举例如下:

131301_Mkqk_1156660.png

那么同样的,参数可以传入就同样可以返回,就像下面这样,当调用一个函数的时候,这个函数返回另外一个函数,这样就允许你拿着返回回来的函数,做对应的操作。

132024_QauY_1156660.png

对于函数中返回函数这种情况而言,其实很少会出现这种情况,除非你不想在调用“父函数”的时候就立即执行操作,而是返回一个“子函数”,当你需要的时候再通过调用“子函数”来执行对应的逻辑。

但是,由于python的这种特性。

什么特性?

在函数中,还可以定义和调用其他函数!

于是,我们的代码可以这么写:

132629_I8y1_1156660.png

在函数中调用函数,python会根据“就近原则”去决定到底调用那一个函数。

其实,只要你理解了:函数名也是变量。那么就应该能够想明白,为什么会优先调用函数内部的函数,为什么在函数内定义的函数不能在函数外调用。说白了,就是一个“函数名变量”作用域的问题!

2,高阶函数举例

一个常见的场景是,我们需要对列表、集合或者字典中的元素进行“过滤”。

filter 函数:接收一个函数和一个序列,它会依次把序列中的元素放到函数中,然后根据函数返回值是 True 还是 False 来决定是否保留该元素

一个案例:把一个列表中,不是素数的元素全部都过滤掉

134818_cAdC_1156660.png

另一个常见的场景就是排序。

sorted 函数:可以根据指定的函数,对列表,字典等进行排序。sorted 函数规定,对于两个元素 x,y ,如果 x > y 则返回1,x < y 则返回 -1,x == y 则返回 0

一个案例:对列表中的元素实现倒序排列

193405_KHBF_1156660.png

3,匿名函数

匿名函数,就是python中有名的“lambda”表达式。

对于这种匿名函数,它的一个限制就是函数体的代码只能有一个表达式,而且不需要写 return,改函数的返回值就是函数的调用结果。

一个简单的案例:对两个数做加法

194040_FmBg_1156660.png

根据案例可以确定,匿名函数采用关键字“lambda”声明,然后 “:”前面是函数的参数,后面则是运算的表达式。该“lambda”表达式返回的值是一个“function”,然后可以通过该返回值来调用这个匿名函数,当然了,你也可以直接调用,就像下面这样!

复杂的案例:求给定数 n 的阶乘

194640_EKKb_1156660.png

其中 reduce 是python中的另外一个 高阶函数,它的作用是把列表中的值依次作用于一个函数(当然,这里是个匿名函数),然后保存每一次作用后的结果,针对这些结果做“累积”运算!


-----------------------------------------------华丽的分割线------------------------------------------

下一步,模块!


转载于:https://my.oschina.net/u/1156660/blog/370705

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值