参考:

函数式编程

高阶函数

Note

A.函数式编程(Functional Programming)介绍

1.函数是Python内建支持的一种封装,我们通过一层一层的函数调用把复杂任务分解成简单的任务,这种分解可以称之为面向过程的程序设计。函数就是面向过程的程序设计的基本单元。这一点和C语言是一致的。

2.计算机和计算的概念:

a.在计算机的层次上,CPU执行的是加减乘除的指令代码,以及各种条件判断和跳转指令,所以,汇编语言是最贴近计算机的语言。

b.计算则指数学意义上的计算,越是抽象的计算,离计算机硬件越远。

因此对应到编程语言:越低级的语言,越贴近计算机,抽象程度低,执行效率高,比如C语言;越高级的语言,越贴近计算,抽象程度高,执行效率低,比如Lisp语言。

  • 函数式编程就是一种抽象程度很高的编程范式;
  • 纯粹的函数式编程语言编写的函数没有变量 => 任意一个函数,只要输入是确定的,输出就是确定的 => 我们称之为没有副作用。
  • 而允许使用变量的程序设计语言 => 函数内部的变量状态不确定,同样的输入,可能得到不同的输出 => 这种函数是有副作用的。

3.函数式编程的一个特点就是,允许把函数本身作为参数传入另一个函数,还允许返回一个函数。

4.Python对函数式编程提供部分支持。由于Python允许使用变量,因此,Python不是纯函数式编程语言。

B.高阶函数 Higher-order function

1.变量可以指向函数:

#!/usr/bin/env python3a = abs(-10)print(a)b = absprint(b)
sh-3.2# ./intro.py
10
<built-in function abs>

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

可以通过指向函数的变量来调用该函数:

print(b(-199))
199

说明现在变量b指向函数abs(),调用b()相当于调用abs()。

2.函数名是变量:函数名其实就是指向函数的变量。

例如,对于abs()这个方法,abs完全就是指向该函数的变量。但是如果将abs指向其他object,就无法再次调用abs原来指向的函数。

abs = 10print(abs)print(abs(-10))
10
Traceback (most recent call last):File "./intro.py", line 17, in <module>print(abs(-10))
TypeError: 'int' object is not callable

注:abs函数本身来自模块builtins,若要改动整个模块的abs指向,使用以下语句:

import builtinsbuiltins.abs = 10

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

例如:一个简单的高阶函数

#!/usr/bin/env python3def addtwonums(a, b) :return a+bdef func(a, b, f) :return f(a, b)def main() :a = int(input())b = int(input())f = addtwonumsprint(func(a, b, f))if __name__ == '__main__':main()
sh-3.2# ./intro2.py
100
99
199

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

2017/2/10

转载于:https://www.cnblogs.com/qq952693358/p/6386698.html

Python学习札记(二十) 函数式编程1 介绍 高阶函数介绍相关推荐

  1. Python学习札记(二十三) 函数式编程4 sorted

    参考:sorted NOTE 1.sorted,快速排序,时间复杂度O(nlogn)渐进最优. #!/usr/bin/env python3L = []for i in range(10):L.app ...

  2. Python学习札记(二十八) 模块1

    参考:模块 NOTE 1.模块:一个.py文件称为一个模块. 2.代码模块化的意义:a.提升程序的可维护性 b.不用重复造轮子 3.避免模块冲突,解决方法:引入了按目录来组织模块的方法,称为包(Pac ...

  3. Scala编程基础——集合高阶函数

    Scala编程基础--集合&高阶函数 集合 Scala中集合分为可变集合和不可变集合 可变集合:可以修改.添加.移除一个集合的元素. 不可变集合:安全的并发访问. 不可变集合,相比之下,永远不 ...

  4. python函数式编程读取数据-python学习笔记9:函数式编程

    函数式编程(FunctionalProgramming) 基于lambda演算的一种编程方式 程序中只有函数 函数可以作为参数,同样可以作为返回值 纯函数式编程语言: LISP, Haskell Py ...

  5. Kotlin 编程核心基石—高阶函数

    前言 1. 高阶函数有多重要? 高阶函数,在 Kotlin 里有着举足轻重的地位.它是 Kotlin 函数式编程的基石,它是各种框架的关键元素,比如:协程,Jetpack Compose,Gradle ...

  6. python (第八章)补充-可迭代对象(补充高阶函数,以及常用的高阶函数)

    文章目录 可迭代对象 迭代器 什么是迭代器 什么是生成器 生成器的作用 生成器的注意事项 总结: 高阶函数 什么是高阶函数? map()函数 filter()函数 reduce()函数 参考 可迭代对 ...

  7. Python学习笔记__4章 函数式编程

    # 这是学习廖雪峰老师python教程的学习笔记 函数是Python内建支持的一种封装,我们通过把大段代码拆成函数,通过一层一层的函数调用,就可以把复杂任务分解成简单的任务,这种分解可以称之为面向过程 ...

  8. Python学习日记(二十九) 网络编程

    早期的计算机通信需要有一个中间件,A要给B传东西,A必须要把信息传给中间件,B再把从中间件中拿到信息 由于不同机器之间需要通信就产生了网络 软件开发的架构 1.C/S架构 服务器-客户机,即Clien ...

  9. Python学习札记(二) python3.5安装 + (假装是)第一个Python程序

    参考: Mac OS 安装 Python3.5 廖雪峰Python教程:安装Python 笔记: 安装: 1.官方网站下载安装包:安装程序 2.执行安装程序完成Python3.5包的安装. 3.安装P ...

最新文章

  1. 使用 Java 开发 OpenCV 应用
  2. Shell脚本实战之文件批量创建和修改
  3. 论文浅尝 | Data Intelligence 已出版的知识图谱主题论文
  4. 干货!一文看Doris在作业帮实时数仓中的应用实践
  5. java画一个小车_小轿车简笔画怎么画
  6. 利用iisnode模块,让你的Node.js应用跑在Windows系统IIS中
  7. (音视频学习笔记):ffplay命令选项及使用案例
  8. 批量语音转文字python
  9. python爬虫--王者荣耀高清壁纸下载
  10. 2021年展望Android原生开发的现状,真香!
  11. 【火同学】OPencv学习笔记——滑动条的创建和使用
  12. golang map的遍历
  13. 解决导出CSV文件乱码的问题
  14. 这就是我英语 来自http://www.uuseenews.com.cn/
  15. eovs实训报告总结心得_实训心得10篇完美版
  16. 首师大附中互测题:99999999海岛帝国后传:算法大会【D001】
  17. Leetcode1-两数之和
  18. 30行Python代码实现自动收发邮件
  19. scrapy实践-02
  20. 英语写作短语100句

热门文章

  1. python爬虫简单实例-Python 利用Python编写简单网络爬虫实例3
  2. 在当当买了python怎么下载源代码-python爬虫爬取当当网
  3. python有道翻译-Python调用有道词典翻译
  4. python代码案例详解-新手必学Python爬虫之Scrapy框架案例详解
  5. python3.8.2汉化包-Python3.8.2中文版 32/64位 官方最新版
  6. python主要运用于-Python的8大主要应用领域,看看哪个是你的菜?
  7. python编写一个软件-python写一个随机点名软件的实例
  8. python工作好找吗-Python好找工作吗 不看会后悔
  9. python基本语法语句-python学习笔记:基本语法
  10. python中文叫什么意思-在python中%是什么意思