Python 高阶函数

Python 高阶函数

什么是高阶函数:

高阶函数就是能够接收函数对象作为参数的函数。

比如:

def higher_func(arg_func):
	print 'in higher func'
	return arg_func

def func():
	print 'hello world'

x = higher_func(func)
x()

上段代码的执行结果为:

in higher func
hello world

为什么会这样呢,要解释清楚就需要从基础慢慢的来了~

变量可以指向函数

首先,我们要知道。在Python中,变量可以指向函数对象,这就可以做很多好玩的东西。比如说:

>>> abs(10)					// 调用内置的求绝对值的函数
10
>>> abs						// 查看函数对象本身,可见`abs(10)`是函数对象调用,而`abs`作为函数名指向函数对象本身
<built-in function abs>
>>> f = abs					// 把函数对象赋值给变量f
>>> f
<built-in function abs>
>>> f(10)						// 通过变量去调用函数
10

经过上面的折腾就能看到变量f其实是指向了一个函数对象,通过它也能够调用函数对象,效果和函数名调用对象相同。

函数名也是变量

变量名可以指向函数对象,那么函数名是不是也只是一个变量呢,是不是也可以指向其他的函数对象呢,我们来试一下:

>>> f = abs
>>> abs = len							// 让`abs`这个函数名不在指向绝对值函数对象,重新指向`len`函数对象
>>> abs								// `abs`已经改变
<built-in function len>
>>> len
<built-in function len>
>>> abs(10)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: object of type 'int' has no len()
>>> f									// 变量f依然指向的是绝对值函数对象
<built-in function abs>
>>> f(10)
10

高阶函数

这样就能解释开头的代码了:

# 定义一个函数对象
def higher_func(arg_func):
	print 'in higher func'
	return arg_func

# 定义另外一个函数对象
def func():
	print 'hello world'

# 将函数func的对象作为参数传给higher_func,返回的依然是func的对象本身,并且顺带之行了higher_func内的打印语句
x = higher_func(func)
# x被赋值为func对象,x()调用该对象
x()

这里的higher_func便是一个高阶函数。再来一个例子:

def add(x, y, func):
	return func(x) + func(y)
	
x = add(-4, 6, abs)
print x					// 执行的是abs(-4) + abs(6) = 10

高阶函数总结

高阶函数的概念并不仅仅在Python才有,JavaScript、PHP甚至C/C++中都能够遇到高阶函数

JavaScript中大量的使用了高阶函数,PHP的使用闭包也会遇到高阶函数。

C/C++中使用指针和函数指针也会遇到高阶函数

posted @ 2017-04-09 13:33  听雨阁中听雨歌  Views(313)  Comments(0Edit  收藏  举报