0 环境 编辑器:idea或vscode 系统版本:windows10 python版本:3.9.6 1 前言 什么是高阶函数,学它有啥用处,先回答用处,它是之后学的装饰器算是它的延伸,一开始学装饰器都是有点似懂非
0 环境
- 编辑器:idea或vscode
- 系统版本:windows10
- python版本:3.9.6
1 前言
什么是高阶函数,学它有啥用处,先回答用处,它是之后学的装饰器算是它的延伸,一开始学装饰器都是有点似懂非懂的,但是先搞明白了高阶函数,再去看装饰器,明显就会轻松好多,窗户纸一捅就破的那种。
2 高阶函数的定义
高阶函数和普通函数到底有哪些区别,不都是函数?这里是看它的返回值,高阶函数的返回值是一个函数或者参数是函数的函数的情况下,就是高阶函数。拆分开来就是情况一、它的返回值是个函数,情况二、它的入参是个函数,这两种情况的函数,符合高阶函数。函数可以被赋值给变量(a = fn),正常被调用(a())。
函数当参数的情况下,也是可以的,compare接收函数的,默认为None,当我调用demo函数时,传入一个列表,一个匿名函数,demo函数执行compare两个值的比较结果,最终return出去。
def demo(val, compare=None):a, b = val[:2]
return compare(a, b)
if __name__ == '__main__':
print(demo([2, 3, 4], compare = lambda a, b: a < b))
如果你认为这个比较最好能默认,def demo(val, compare = lambda a, b: a < b),这样我们是不是很方便了,直接demo([2, 3, 4]),无需每次去复制粘贴后面的匿名函数。
3 总结
把函数作为入参的应用场景,大多数用于固定的逻辑下,很少一部分会用于不在固定的场景下。肯定会有一个疑问就是,我一个函数是可以直接调用其他普通的函数,何必多次一举呢,比如我们之前学的filter函数,它是可以自定义传入一个函数的,在开动脑筋,假如我不使用函数作为参数的方式,而是之前那种写死普通函数的方式,我想过滤个其他字段或者说我想让它取反输出,是不是就做不到了,但是函数是参数,我们就拥有了改成我想要的样子的权利,是不是更加友好了。