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

1,高阶函数python

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

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

函数,能够看作是python中一种特殊的数据类型。所以我能够这么说:定义函数的过程,实际上是声明了一个特殊的变量,这个变量指向了内存中的一段代码,这段代码就是咱们定义的函数。对象

因此能够得出结论:python中函数名称也是变量。请看这个示例:排序

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

举例以下:作用域

那么一样的,参数能够传入就一样能够返回,就像下面这样,当调用一个函数的时候,这个函数返回另一个函数,这样就容许你拿着返回回来的函数,作对应的操做。字符串

对于函数中返回函数这种状况而言,其实不多会出现这种状况,除非你不想在调用“父函数”的时候就当即执行操做,而是返回一个“子函数”,当你须要的时候再经过调用“子函数”来执行对应的逻辑。io

可是,因为python的这种特性。function

什么特性?

在函数中,还能够定义和调用其余函数!

因而,咱们的代码能够这么写:

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

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

2,高阶函数举例

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

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

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

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

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

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

3,匿名函数

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

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

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

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

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

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


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

下一步,模块!

相关文章
相关标签/搜索