python的高阶函数是什么,有哪些高阶函数
今天我们来讲讲python的高阶函数。一提到高阶这个词,有很多小伙伴就以为会很难,要打退堂鼓了。其实这里高阶并不是高级的意思。
常规函数通常以数据作为参数,并返回数据。而高阶函数就是可以把函数作为参数,或者返回值是函数。 高阶的意思,就是针对函数进行操作或返回。
根据这定义,我们就知道,只要满足以下两个条件任意一个的,都是高阶函数:
1. 参数里有一个或多个函数。
2. 返回一个或多个函数。
举个很简单的例子。
比如有个函数是计算正方形面积的。
def s(x):
return x*x
传入任意边长就能计算面积。而要计算单位正方形面积,边长传入1就行。
我们也可以定义一个专门进行单位操作的高阶函数,
def m(f):
return f(1)
这样,把s函数作为参数传给m,也就是m(s),就可以得到单位正方形的面积了。
这时有小伙伴可能会觉得,这样不是多此一举吗,太麻烦了。。我们这里只是举个例子来说明什么是高阶函数,而且你听我们前面说的,这个m函数是专门用来进行单位操作的,也就是,假如你还有其他函数,比如计算圆的面积的c函数,返回3.14乘与r的平方。这时你要得到单位圆的面积,也可以把这个c传给m,就可以了。
def c(r):
return 3.14 * r ** 2
square_area = m(s) # 计算单位正方形面积
circle_area = m(c) # 计算单位圆面积
print("单位正方形面积:", square_area)
print("单位圆面积:", circle_area)
通过这个例子,应该能理解高阶函数的含义了。在一些情况下使用高阶函数,可以极大的提升代码的灵活性和功能性。
python有些内置的高阶函数,比如我们前一个视频专门介绍的map函数就是个高阶函数,有兴趣的朋友可以看下我之前的视频。其他内置高阶函数比如:filter(), reduce() 等。另外还有sorted(), min(),max(), any(),all()等函数,可接受key函数参数,也是高阶函数。
以map函数为例,假设我们有一个列表[1, 2, 3, 4, 5],想要对列表中的每个元素都进行平方操作,使用map函数可以这样写:
nums = [1, 2, 3, 4, 5]
result = list(map(lambda x: x ** 2, nums))
print(result)
在使用高阶函数时要注意,每个高阶函数对传入的函数和参数可能会有自己的要求,使用时要确保满足这些要求。比如我们前面这个例子,传给m的函数要求传入一个数值型参数,这里s和c函数都是传入一个数值型的。再比如map函数,要求传入的函数必须能接受一个或多个对象作为参数。
前面还说到有返回函数的高阶函数,通过这样的函数可以实现闭包。这视频我们主要是说高阶函数的概念,就不展开来说闭包了。
在适当的时候使用或者自定义高阶函数,可以让代码更简洁,提高函数的可复用性,这也是一种函数式的编程风格。能帮助开发者编写出更加优雅、高效的程序。