[TOC]

### 引入

高阶函数英文叫`Higher-order function`。什么是高阶函数?我们以实际代码为例子,一步一步深入概念。

### 变量可以指向函数

以Python内置的求绝对值的函数abs()为例,调用该函数用以下代码:

~~~

>>> abs(-10)

10

~~~

但是,如果只写abs呢?

~~~

>>> abs

~~~

可见,`abs(-10)`是函数调用,而`abs`是函数本身。

要获得函数调用结果,我们可以把结果赋值给变量:

~~~

>>> x = abs(-10)

>>> x

10

~~~

但是,如果把函数本身赋值给变量呢?

~~~

>>> f = abs

>>> f

~~~

**结论:函数本身也可以赋值给变量,即:变量可以指向函数。**

### 变量调用函数

**如果一个变量指向了一个函数,那么,可否通过该变量来调用这个函数?用代码验证一下:**

~~~

>>> f = abs

>>> f(-10)

10

~~~

成功!说明变量`f`现在已经指向了`abs`函数本身。直接调用`abs(`)函数和调用变量`f()`完全相同。

### 函数名也是变量

那么函数名是什么呢?函数名其实就是指向函数的变量!对于`abs()`这个函数,完全可以把函数名`abs`看成变量,它指向一个可以计算绝对值的函数!

如果把abs指向其他对象,会有什么情况发生?

~~~

>>> abs = 10

>>> abs(-10)

Traceback (most recent call last):

File "", line 1, in

TypeError: 'int' object is not callable

~~~

把`abs`指向`10`后,就无法通过`abs(-10)`调用该函数了!因为`abs`这个变量已经不指向求绝对值函数而是指向一个整数`10`!

当然实际代码绝对不能这么写,这里是为了说明函数名也是变量。要恢复`abs`函数,请重启Python交互环境。

注:由于`abs`函数实际上是定义在`import builtins`模块中的,所以要让修改`abs`变量的指向在其它模块也生效,要用`import builtins; builtins.abs = 10`。

### 传入函数

既然变量可以指向函数,函数的参数能接收变量,那么一个函数就可以接收另一个函数作为参数,这种函数就称之为高阶函数。

一个最简单的高阶函数:

~~~

def add(x, y, f):

return f(x) + f(y)

~~~

当我们调用`add(-5, 6, abs)`时,参数`x`,`y`和`f`分别接收`-5,6`和`abs`,根据函数定义,我们可以推导计算过程为:

~~~

x = -5

y = 6

f = abs

f(x) + f(y) ==> abs(-5) + abs(6) ==> 11

return 11

~~~

用代码验证一下:

~~~

>>> add(-5, 6, abs)

11

~~~

编写高阶函数,就是让函数的参数能够接收别的函数。

### 小结

把函数作为参数传入,这样的函数称为高阶函数,函数式编程就是指这种高度抽象的编程范式。

廖雪峰讲python高阶函数求导_高阶函数 · 廖雪峰的Python3.x教程 · 看云相关推荐

  1. 廖雪峰讲python高阶函数求导_高阶函数 - 廖雪峰的Python2.7教程 - 广州尚鹏

    高阶函数英文叫Higher-order function.什么是高阶函数?我们以实际代码为例子,一步一步深入概念. 变量可以指向函数 以Python内置的求绝对值的函数abs()为例,调用该函数用以下 ...

  2. python函数求导_python怎么实现函数求导

    python实现函数求导的方法是:1.利用sympy库中的symbols方法传入x和y变量:2.利用sympy库中的diff函数传入需要求导的函数即可返回求导之后的结果. python利用sympy库 ...

  3. java对三次函数求导_如何画三次函数图像

    问题 请绘制 的图形 思路一 借助软件 软件名称 介绍 geogebra image.png GeoGebra是自由且跨平台的动态数学软件,提供各级教育使用,包含了几何.代数.表格.图形.统计和微积分 ...

  4. 廖雪峰讲python高阶函数求导_廖雪峰python课程笔记

    1. 可以通过 print(os.sys.path) 来查看python可导入的包的路径情况,这会打印出一个list.当我们import某一个包时,python会根据这个list,从前向后搜寻相匹配的 ...

  5. sigmoid函数求导_交叉熵损失函数的求导(Logistic回归)

    目录 前言 交叉熵损失函数 交叉熵损失函数的求导 前言 最近有遇到些同学找我讨论sigmoid训练多标签或者用在目标检测中的问题,我想写一些他们的东西,想到以前的博客里躺着这篇文章(2015年读研时机 ...

  6. python二元函数求导_用Excel和python实现二元函数梯度下降的人工智能,之用,excel,一元...

    梯度下降法和牛顿法的总结与比较 机器学习的本质是建立优化模型,通过优化方法,不断迭代参数向量,找到使目标函数最优的参数向量.最终建立模型 通常用到的优化方法:梯度下降方法.牛顿法.拟牛顿法等.这些优化 ...

  7. python自定义函数求方差_计算高斯函数的标准差

    我有一个数字的列表,当与它的长度相对应时,它给了我一个高斯分布.我想计算这个高斯函数的标准差,但是我得到的值(使用np.标准()函数)显然太小了(我得到的值是0.00143-而它应该是8.234.我想 ...

  8. java三次样条函数求导_利用java语言对三次样条曲线的实现

    Java语言中关于曲线问题的高级应用开发在jdk尚未支援2D图形之前,只可以画出直的.相同粗细的线条.现在可以通过2DAPI绘出不同粗细的线条及圆滑的曲线.通过系统java.awt.geom包中提供了 ...

  9. python3多进程_多进程 · 廖雪峰的Python3.x教程 · 看云

    [TOC] ### 操作系统中的进程 要让Python程序实现多进程(`multiprocessing`),我们先了解操作系统的相关知识. `Unix/Linux`操作系统提供了一个`fork()`系 ...

最新文章

  1. 关于SQLServer2005的学习笔记——XML的处理
  2. 数字图像的表示与类型(学习篇)
  3. APK加壳【1】初步方案实现详解
  4. day011_步入百万年薪的第十一天
  5. esp32原理图设计_第十一章 ESP32的PWM全彩LED灯显示
  6. linux创建zip+函数,linux+shell基础知识
  7. 上学与不上学的区别_这是我在全球最大的React会议上学到的
  8. IntelliJ IDEA快速自动生成Junit测试类
  9. html5中web存储(localStorage、sessionStorage)与cookie的区别?????
  10. Android自定义View【实战教程】5⃣️---Canvas详解及代码绘制安卓机器人
  11. 大数据引领医药行业 为时过早
  12. 刷吉米多维奇系列小结(一)
  13. 台达DOP-B触摸屏通过MODBUS RTU通讯4台台达M变频器.含触摸屏程序,接线图和变频器参数设定
  14. 在线解方程的计算机,解方程计算器在线使用 方程计算器如何在线使用
  15. ZeNmap端口扫描工具详解10种扫描方式附使用脚本扫描教程
  16. PowerDesigner的使用
  17. 快速复制论文中的公式
  18. MATLAB安装摄像头插件
  19. iOS 逆向编程(十九)Mach-O 入门了解(如何通过 Mach-O 逆向 APP 思路)
  20. 一文看懂人工智能产业链,未来10年2000亿美元市场

热门文章

  1. 桥接器(network Bridging)
  2. Ansible-python
  3. 常用文件IO函数 -open/close
  4. 《心跳文学部》信件解密
  5. modelsim do文件
  6. ManGe Commander 文档 v0.3
  7. Swift源码简单解读-Map与FlatMap
  8. Google排名新算法之二
  9. Ubuntu下Java使用pdfbox将pdf转换为图片的方法及问题
  10. lda主题模型python实现篇