Python基础:09.函数式编程
一、高阶函数
一个函数可以接收另一个函数作为参数,这种函数就称之为高阶函数
首先在python中,变量可以指向函数,该变量可以来调用这个函数
1 |
|
10
所以abs这三个字母其实也只是一个变量而已,但其指向了绝对值函数,如果把abs重新赋值为另一个数字,就不能调用abs函数了。我们知道函数的参数可以接收变量,那么变量又可以指向函数,所以一个函数就可以接收另一个函数作为参数,这种函数就称之为高阶函数
1 |
|
2
python中有很多非常有用的高级函数:
- map/reduce
- filter
- sorted
放到python内置函数一节中去讲
二、返回函数
高阶函数可以把函数作为结果值返回
返回一个函数时,该函数未执行。可以用于不需要立刻求解函数的场景
1 |
|
22
1 |
|
<function lazy_sum.
.sum at 0x000001F19D1E7620>
22
上一段代码需要注意的是,将返回函数付给一个变量时,该变量加括号才算调用了函数
1 |
|
False
- 函数lazy_sum中又定义了函数sum,并且,内部函数sum可以引用外部函数lazy_sum的参数和局部变量
- 注意到上面第三段程序中,第一次引用lazy_sum返回了sum后,lazy_sum的参数和内部局部变量还可以被新函数引用,所以其又引用第二次,赋给f2
- 当lazy_sum返回函数sum时,相关参数和变量都保存在返回的函数中,这种方法称为
闭包
闭包
1 |
|
9
9
9
1 |
|
1
4
9
返回函数不要引用任何循环变量,或者后续会发生变化的变量,容易出错
偏函数
- 不同于数学的偏函数
- 是调用functools.partial,作用是把一个函数的某些参数设置默认值,返回一个新的函数,调用这个新函数会更简单
- 设置默认值之后,想要用其他的值也是可以的
1 |
|
64
1 |
|
64
1 |
|
1000000
Python基础:09.函数式编程
http://jswanyu.github.io/2021/09/15/Python/Python基础:09.函数式编程/