该篇中主要介绍什么是高阶函数,高阶函数的用法以及几个常见的内置的高阶函数。

什么是高阶函数?

  高阶函数:一个函数可以作为参数传给另外一个函数,或者一个函数的返回值为另外一个函数(若返回值为该函数本身,则为递归),满足其一则为高阶函数。

 

通过了解以下两个概念来理解高阶函数:

A.变量指向函数:函数本身也可以赋值给变量,即:变量可以指向函数

例如:python内置函数求和函数sum:

>>sum([11,22])
>>33
#如果我将函数结果赋值变量
>>sum1=sum([11,22])
>>print(sum1)
>>33
#得到结果也是33,如果此时直接输出sum呢
>>print(sum)
>><built-in function sum>
#说明此时获取的是函数对象,那么此时如果直接将该对象赋值给变量
>>sum2=sum
>>print(sum2)
>><built-in function sum>
#此时会发现变量sum2已经指向了sum函数对象本身了,也就是说明sum2变量同样可以实现求和操作
>>sum2([11,22])
>>33

 

B.函数名也可以是变量:顾名思义,函数名也可以当做变量进行再次赋值;但是在编程中,都建议对变量名命名不能够使用其语言内置的保留字、关键字等;但是在python中,可以对其函数进行重新指向;

例如:同样以python内置函数为例:

>>sum([10,20])
>>30
#如果将sum函数名进行作为变量重新赋值会出现什么情况呢?
>>sum=20
#如果此时继续调用sum进行求和会出现什么情况?
>>sum([1,2])
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'int' object is not callable
>>print(sum)
>>20

结论:把sum指向20后,就无法通过sum([1,2])调用该函数了!因为sum这个变量已经不指向求和函数了!

当然实际代码绝对不能够这么写,这里为了说明函数名也是变量;如果需要回复sum函数,则重启python交互式环境;

 

C.1.高阶函数:参数为函数;

#参数为函数
def test1():
    print("这是第一个函数")
def test2(func):
    func()
    print("这是第二个函数")
test2(test1)
#在这里小伙伴们有木有想到啥呀?
#对了,是不是有点装饰器的感觉在里面;后面详细说明装饰器哦

2.高阶函数:返回值为函数;

#返回值为函数
def test1():
    print("这是第一个函数")
def test2(func):
    print("这是第二个函数")
    return test1
res=test2(test1)
res()
#输出结果小伙伴们可以猜一下哦?
#第七行会输出这是第二个函数
#第八行会输出这是第一个函数

编写高阶函数的主要目的:就是让函数的参数能够接收别的函数。

常用高阶函数的具体操作请查看Python函数式编程之高阶函数(二)