1、什么是函数式编程?
- 函数:function,高级语言基本都有这个概念(本人目前学习过Fortran,c,c++,python,这些语言都有函数)
- 函数式:functional,一种编程范式
- 函数式编程是一种抽象计算的编程模式
- 函数≠函数式,就好比:计算≠计算机一样
不同语言的抽象层次不同
2、函数式编程的特点:
- 把计算视为函数而非指令
- 纯函数式编程:不需要变量,没有副作用,测试简单
- 支持高阶函数,代码简洁
3、Python支持的函数式编程
- 不是纯函数式编程:允许有变量
- 支持高阶函数:函数也可以作为变量传入
- 支持闭包:有了闭包就能返回函数
- 有限度地支持匿名函数
4、python中的高阶函数
首先来看几个例子:
在python中变量可以指向函数:
例如python中的内置函数:abs
如果用f变量去指向abs,则有f(-20)=20
函数名其实就是指向函数的变量:
例如可以让python中的内置函数abs的函数名abs指向len函数(len函数也是内置函数)
即abs = len
那么abs(-10)会报错
而abs([1,2,3])会返回3
高阶函数的概念:能接受函数做参数的函数
- 变量可以指向函数
- 函数的参数可以接收变量
- 一个函数可以接收另一个函数作为参数
- 能接收函数作参数的函数就是高阶函数
一个例子:接收abs函数
- 定义一个函数,接收x,y,f三个参数
- 其中x,y是数值,f是函数
- def add(x,y,f)
- return f(x)+f(y)
而在Fortran中,(我是水利水电专业的工科生,平时用得最多的还是Fortran),其实也能把函数作为参数传递的,但过程说实话比较麻烦:(在Fortran中,abs函数严格意义上是个求模函数,默认的返回值类型是real,一般abs(x)的返回值类型是x的类型,x是complex类型除外)