网站首页 > 基础教程 正文
今天我们来讲讲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函数,要求传入的函数必须能接受一个或多个对象作为参数。
前面还说到有返回函数的高阶函数,通过这样的函数可以实现闭包。这视频我们主要是说高阶函数的概念,就不展开来说闭包了。
在适当的时候使用或者自定义高阶函数,可以让代码更简洁,提高函数的可复用性,这也是一种函数式的编程风格。能帮助开发者编写出更加优雅、高效的程序。
- 上一篇: PY基础函数、自定义函数与高级函数
- 下一篇: Python 函数进阶的10大技巧,不允许你还不会
猜你喜欢
- 2025-06-15 PY函数知识点及实例代码(python函数代码大全)
- 2025-06-15 学好了Python,我们可以实现很多算法了
- 2025-06-15 Python 函数式编程的 8 大核心技巧,不允许你还不会
- 2025-06-15 Python 函数进阶的10大技巧,不允许你还不会
- 2025-06-15 PY基础函数、自定义函数与高级函数
- 2025-06-15 python编程中列表常见的9大问题,你知道吗?
- 2025-06-15 三种不同方式,教你详细解析python反转列表(建议收藏)
- 2025-06-15 新手必看!30 个 Python 核心函数详解,手把手教你玩转编程
- 2025-06-15 Python入门到脱坑经典案例—列表排序
- 2025-06-15 零基础入门 Python 内置函数:从基础到进阶的实用指南
- 最近发表
- 标签列表
-
- jsp (69)
- gitpush (78)
- gitreset (66)
- python字典 (67)
- dockercp (63)
- gitclone命令 (63)
- dockersave (62)
- linux命令大全 (65)
- pythonif (86)
- location.href (69)
- dockerexec (65)
- tail-f (79)
- queryselectorall (63)
- location.search (79)
- bootstrap教程 (74)
- deletesql (62)
- linuxgzip (68)
- 字符串连接 (73)
- html标签 (69)
- c++初始化列表 (64)
- mysqlinnodbmyisam区别 (63)
- arraylistadd (66)
- mysqldatesub函数 (63)
- window10java环境变量设置 (66)
- c++虚函数和纯虚函数的区别 (66)