python笔记 高阶函数

携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第9天,点击查看活动详情

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))
复制代码

image.png

如果你认为这个比较最好能默认,def demo(val, compare = lambda a, b: a < b),这样我们是不是很方便了,直接demo([2, 3, 4]),无需每次去复制粘贴后面的匿名函数。

3 总结

把函数作为入参的应用场景,大多数用于固定的逻辑下,很少一部分会用于不在固定的场景下。肯定会有一个疑问就是,我一个函数是可以直接调用其他普通的函数,何必多次一举呢,比如我们之前学的filter函数,它是可以自定义传入一个函数的,在开动脑筋,假如我不使用函数作为参数的方式,而是之前那种写死普通函数的方式,我想过滤个其他字段或者说我想让它取反输出,是不是就做不到了,但是函数是参数,我们就拥有了改成我想要的样子的权利,是不是更加友好了。

猜你喜欢

转载自juejin.im/post/7127843310697185311