Python进阶之函数式编程(把函数作为参数)

时间:2023-03-08 17:29:41

什么是函数式编程?

什么是函数式编程?

函数: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传入其他函数就可以得到不同的返回值

再例如:计算Python进阶之函数式编程(把函数作为参数)

(计算平方根可以用函数:math.sqrt())

import math

def add(x,y,f):
return f(x)+f(y)

print add(25,9,math.sqrt)