Python:函数式编程(一):关于 Python 的函数式编程

1. 何为函数式编程

维基百科中关于函数式编程的解释:

函数式编程,或称函数程序设计,又称泛函编程,是一种编程范型,它将电脑运算视为数学上的函数计算,并且避免使用程序状态以及易变对象。函数编程语言最重要的基础是λ演算。而且λ演算的函数可以接受函数当作输入(引数)和输出(传出值)。
比起命令式编程,函数式编程更强调程序执行的结果而非执行的过程,倡导利用简单的执行单元让计算结果不断渐进,逐层推导复杂的运算,而不是设计一个复杂的执行过程。

函数式编程的中的函数指的是数学中的函数,即自变量的映射。也就是说一个函数的值仅决定于函数参数的值,不依赖其他状态。
函数式编程就是用计算(函数)来表示程序, 用计算(函数)的组合来表达程序的组合的思维方式。

1.1 函数式编程的五个特性:

  1. 函数是"第一等公民":所谓"第一等公民"(first class),指的是函数与其他数据类型一样,处于平等地位,可以赋值给其他变量,也可以作为参数,传入另一个函数,或者作为别的函数的返回值。
  2. 只用"表达式",不用"语句":“表达式”(expression)是一个单纯的运算过程,总是有返回值;“语句”(statement)是执行某种操作,没有返回值。函数式编程要求,只使用表达式,不使用语句。也就是说,每一步都是单纯的运算,而且都有返回值。
  3. 没有"副作用":所谓"副作用"(side effect),指的是函数内部与外部互动(最典型的情况,就是修改全局变量的值),产生运算以外的其他结果。函数式编程强调没有"副作用",意味着函数要保持独立,所有功能就是返回一个新的值,没有其他行为,尤其是不得修改外部变量的值。
  4. 不修改状态:上一点已经提到,函数式编程只是返回新的值,不修改系统变量。因此,不修改变量,也是它的一个重要特点。
  5. 引用透明性:函数程序通常还加强引用透明性,即如果提供同样的输入,那么函数总是返回同样的结果。就是说,表达式的值不依赖于可以改变值的全局状态。

1.2 函数式编程的优点:

  1. 代码简洁,开发快速;函数式编程大量使用函数,减少了代码的重复,因此程序比较短,开发速度较快。
  2. 接近自然语言,易于理解;函数式编程的自由度很高,可以写出很接近自然语言的代码。
  3. 更方便的代码管理;函数式编程不依赖、也不会改变外界的状态,只要给定输入参数,返回的结果必定相同。因此,每一个函数都可以被看做独立单元,很有利于进行单元测试(unit testing)和调试(debugging),以及模块化组合。
  4. 函数式编程不需要考虑"死锁"(deadlock),因为它不修改变量,所以根本不存在"锁"线程的问题。不必担心一个线程的数据,被另一个线程修改,所以可以很放心地把工作分摊到多个线程,部署"并发编程"(concurrency)。
  5. 代码的热升级 函数式编程没有副作用,只要保证接口不变,内部实现是外部无关的。所以,可以在运行状态下直接升级代码,不需要重启,也不需要停机。

2. Python 的函数式编程

Python 并不是严格的真正意义上的函数式编程语言,但是 Python 对函数式编程提供部分支持。主要体现在下面几个方面:

  • Python 的一些语法,比如lambda、列表解析、字典解析、生成器、iter 等
  • Python 的一些内置函数,包括 map、reduce、filter、all、any、enumerate、zip 等
  • Python 的一些内置模块,比如 itertools、functools 和 operator 模块等
  • Python 的一些第三方库,比如 fn.py, toolz 等
  • Python 将函数视为“第一等公民” – 对象,因此可以作为函数参数也可以作为函数的返回值。包括高阶函数,返回函数,偏函数等。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值