什么是函数式编程?
什么是函数式编程?
函数:function
函数式:functional,一种编程范式
函数式编程是一种抽象计算的编程模式
函数≠函数式,比如:计算≠计算机
在计算机当中,计算机硬件是最底层的,而越往上语言越高级
低--------------------------------->高
计算机硬件-->汇编语言-->c语言-->Python语言
↓ ↓ ↓
指令 函数 函数式
计算机------------------------>计算(数学)
○ 函数式编程的特点
- 把计算视为函数而非指令
- 纯函数式编程:不需要变量,没有副作用,测试简单
- 支持高阶函数,代码简洁
○ Python支持的函数式编程有以下特点:
- 不是纯函数式编程:允许有变量
- 支持高阶函数:函数也可以作为变量传入
- 支持闭包:有了闭包就能返回函数
- 有限度地支持匿名函数
把函数作为参数
○ 什么是高阶函数?
- 变量可以指向函数
例如,python中有个函数叫abs(求绝对值)
>>> abs(-10)
10
>>> abs
<built-in function abs>
>>> f=abs
>>> f(-20)
20
- 函数名其实就是指向函数的变量
同样是abs函数
>>> abs
<built-in function abs>
>>> abs=len
>>> abs(-10)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: object of type 'int' has no len()
>>> abs([1,2,3])
3
如果我们把abs这个变量指向函数另一个函数,那么abs就不再是求绝对值的函数,这个时候就会报错。这个时候abs指向的是len函数。这个时候我们给abs传入一个list,就可以正常调用了。函数名与普通变量没有什么区别,它指向的是一个函数名。
- 高阶函数:能接收函数做参数的函数
- 变量可以指向函数
- 函数的参数可以接收变量
- 一个函数可以接收另一个函数作为参数
- 能接收函数作参数的函数就是高阶函数
例:接收abs函数
- 定义一个函数,接收x,y,f三个参数
- 其中x,y是数值,f是函数
>>>def add(x,y,f):
... return f(x)+f(y)
...
>>> add(-5,9,abs)
14
上面的代码,根据函数的定义,函数执行的代码实际上是:
abs(-5)+abs(9)
由于参数x,y和f都可以任意传入,如果f传入其他函数就可以得到不同的返回值
再例如:计算
(计算平方根可以用函数:math.sqrt()
)
import math
def add(x,y,f):
return f(x)+f(y)
print add(25,9,math.sqrt)