函数是Python内建支持的一种封装,我们通过把大段代码拆成函数,通过一层一层的函数调用,就可以把复杂任务分解成简单的任务,这种分解可以称之为面向过程的程序设计。函数就是面向过程的程序设计的基本单元。
函数式编程就是一种抽象程度很高的编程范式,纯粹的函数式编程语言编写的函数没有变量,因此,任意一个函数,只要输入是确定的,输出就是确定的,这种纯函数我们称之为没有副作用。而允许使用变量的程序设计语言,由于函数内部的变量状态不确定,同样的输入,可能得到不同的输出,因此,这种函数是有副作用的。
函数式编程的一个特点就是,允许把函数本身作为参数传入另一个函数,还允许返回一个函数!
Python对函数式编程提供部分支持。由于Python允许使用变量,因此,Python不是纯函数式编程语言。
一:高阶函数
函数本身可以赋值给变量。即变量可以指向函数。这样可以通过变量来间接调用函数
>>> f = abs
>>> f(-123)
123
二:函数名也是变量
函数名其实就是一个指向函数的变量,例如上边的abs,就是abs这个变量指向了一个可以计算绝对值的函数。如果把abs指向其他对象,结果如何呢?
>>> abs = -10
>>> abs(-123)
Traceback (most recent call last):
File "<pyshell#3>", line 1, in <module>
abs(-123)
TypeError: 'int' object is not callable
把abs指向-10之后,就无法通过abs(-123)来调用该函数了。因为abs指向了-10,而不是求绝对值的函数。
三:传入函数
既然变量可以指向函数,而函数又可以接受变量作为参数,那么一个函数就可以接收另一个函数作为参数,这种函数就称为高阶函数。
#!/usr/bin/python
#coding:utf-8
def add(x, y, f):
return f(x) + f(y)
print add(-10,9,abs)
结果显示为19,当调用add(-10,9,abs)时,-10传给x,9传给y,abs传给f,即add的结果是求abs(x)+abs(y),即结果为19.
编写高阶函数,就是让函数可以接收别的函数作为参数。