函数式编程 Functional Programmming
1.计算机和计算的概念
计算机是CPU执行的加减乘除的指令代码,以及各种条件判断和跳转指令,所以,汇编语言是贴近计算机的语言。
计算则是指数学意义上的计算,越是抽象的计算,离计算机的硬件越远。
在编程语言中,越低级的语言,越贴近计算机,抽象程度低,执行效率低,执行效率高,比如c语言;越高级的语言,越贴近计算,抽象程度越高,执行效率低。比如Lisp语言。
2.函数式编程的特点:
函数式编程就是一种抽象程度很高的编程范式,
纯粹的函数式编程编写的函数是没有变量的,因此。输入是确定,那么输出也是确定的,这种纯函数我们称之为没有副作用,
使用变量的程序设计语言,由于函数内部变量状态不确定,同样的输入,会有不同的输出,因此这种函数是有副作用的。
函数式编程的一个特点就是允许把函数本身作为参数传入另一个函数,还允许返回一个函数。
Python对函数式编程提供部分支持,由于Python允许使用变量,因此,Python不是纯函数式编程。
高阶函数 Higher-order function
变量可以指向函数:
Python中内置了很多函数,我们可以直接调用,我们还可以把函数本身赋值给一个变量,可以通过这个变量来调用这个函数。
函数名也是变量
函数名:其实就是指向函数的变量。
传入函数:
高阶函数:一个函数可以接收另一个函数作为参数。
函数式编程就是指这种高度抽象的编程范式。
Python内建了map()和reduce()函数
map函数:map()函数接收两个参数,一个是Iterable,map将传入的函数依次作用到序列的每一个元素,并把结果作为新的Iterator返回。
举例:计算一个列表每个元素的平方。
reduce函数:
reduce函数也是接收两个参数,把结果继续和序列的下一个元素做累积计算。
filter函数
接收一个函数和一个序列,filter()函数把传入的函数依次作用于每个元素,然后根据返回值是True还是False决定保留还是丢弃该元素,用于过滤序列s
同时,filter函数返回也是一个Iterator,是一个惰性序列,所以要强迫filter函数完成计算题,需要用list()函数获得所有结果并返回list.
sorted函数:
- 可接受一个key函数来实现自定义的排序,key指定的函数将作用于list的每一个元素上,并根据key函数返回的结果进行排序。