高阶函数英文叫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

用代码验证一下:

# -*- coding: utf-8 -*-

----

def add(x, y, f):

return f(x) + f(y)

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

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

小结

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

廖雪峰讲python高阶函数-高阶函数相关推荐

  1. 廖雪峰讲python高阶函数求导公式_一文读懂Python 高阶函数

    高阶函数 将函数作为参数传入,这样的函数称为高阶函数.函数式编程就是指这种高度抽象的编程范式. 变量可以指向函数,函数的参数能接收变量,那么一个函数就可以接收另一个函数作为参数,这种函数就称之为高阶函 ...

  2. 廖雪峰讲python高阶函数求导公式_高阶函数 - 廖雪峰 Python 2.7 中文教程

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

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

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

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

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

  5. 廖雪峰讲python高阶函数求导公式_廖雪峰的学习笔记(三)高阶函数

    1.所谓的"高阶函数":把函数对象作为参数的函数. 2.示例: map()函数: 我们先看map.map()函数接收两个参数,一个是函数,一个是Iterable,map将传入的函数 ...

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

    [TOC] ### 引入 高阶函数英文叫`Higher-order function`.什么是高阶函数?我们以实际代码为例子,一步一步深入概念. ### 变量可以指向函数 以Python内置的求绝对值 ...

  7. 廖雪峰python教程视频-为什么看不懂廖雪峰的Python学习教程?

    廖雪峰的Python教程已经很友好了,接近于把饭喂到嘴边了. 这不是廖雪峰教程的问题,而是一个基础代码技能和实际应用需求的代码技能差距太远导致的. 如果是新手,只学会了廖雪峰Python教程,那约等于 ...

  8. 廖雪峰python教程完整版-为什么看不懂廖雪峰的Python学习教程?

    廖雪峰的Python教程已经很友好了,接近于把饭喂到嘴边了. 这不是廖雪峰教程的问题,而是一个基础代码技能和实际应用需求的代码技能差距太远导致的. 如果是新手,只学会了廖雪峰Python教程,那约等于 ...

  9. python基础教程廖雪峰云-为什么看不懂廖雪峰的Python学习教程?

    廖雪峰的Python教程已经很友好了,接近于把饭喂到嘴边了. 这不是廖雪峰教程的问题,而是一个基础代码技能和实际应用需求的代码技能差距太远导致的. 如果是新手,只学会了廖雪峰Python教程,那约等于 ...

最新文章

  1. 133.保护频带 134.流量控制在哪些层实现
  2. C 语言结构体_点运算符( . )和箭头运算符( - )的区别
  3. 生产系统服务器是啥意思,生产系统服务器主机名怎么看
  4. 获取字段为List类型中的泛型类型
  5. PHP读取超大的excel文件数据的方案
  6. 04-并发编程-CountDownLatch、CyclicBarrier和 Semaphore
  7. Xamarin只言片语1——Xamarin下的弹框
  8. 教你轻松计算AOE网关键路径(转)
  9. 如何使用postman测试服务器的性能,如何用Postman测试API
  10. 详细解读 | CVPR 2021轻量化目标检测模型MobileDets(附论文下载)
  11. ad14 drc报错_AD怎么设置DRC检查常规检查项报错?
  12. WIN10_cmd命令提示符更换用户启动
  13. Ubuntu完全教程,让你成为Ubuntu高手
  14. 吃着火锅唱着歌,我了解到海底捞的信息化太厉害了
  15. JavaScript调用pc和手机摄像头
  16. 慢性肾炎的中医药调理【转】
  17. php把数组合并,php数组合并_php数组合并、追加与连接的方法、array_combine函数)
  18. 一种直观理解Galois理论的途径
  19. 如何对PDF文档进行数字签名
  20. 【Emmet 的使用手册(知识点超全版本)】

热门文章

  1. 《JavaScript权威指南第四版》 电子版 电子书下载
  2. 传统opencv算法进行灰尘检测(canny,均值漂移,附源码百度云)
  3. 【ubuntu】 18.04 设置swap 交换分区文件
  4. 高质量子程序2——高内聚性
  5. OTA更新SPN/APN以及SIMRefresh实现文档
  6. Unity对接应用宝SDK(YSDK)
  7. 第7周 CSV格式清洗与转换
  8. 美国西点军校的育人之道
  9. Pro/E 或是UG
  10. JS函数 比较三个数字的最大值