#以下来自廖雪峰的Python学习之Python函数式编程

#我们首先要搞明白计算机（Computer）和计算（Compute）的概念。
#在计算机的层次上，CPU执行的是加减乘除的指令代码，以及各种条件判断和跳转指令，所以，汇编语言是最贴近计算机的语言。
#而计算则指数学意义上的计算，越是抽象的计算，离计算机硬件越远。
#对应到编程语言，就是越低级的语言，越贴近计算机，抽象程度低，执行效率高，比如C语言；越高级的语言，越贴近计算，抽象程度高，执行效率低，比如Lisp语言。

#高阶函数///////////////////////////////////
#变量可以指向函数
print('abs(-10) =', abs(-10))
print('abs =', abs)
f = abs
print('f =', f)
print('f(-10) =', f(-10))
#函数名其实就是指向函数的变量！对于abs()这个函数，完全可以把函数名abs看成变量，它指向一个可以计算绝对值的函数!如果把abs指向其他对象，会有什么情况发生？
#abs = 10
#print('abs(-10) =', abs(-10))     #这个会报错

#既然变量可以指向函数，函数的参数能接收变量，那么一个函数就可以接收另一个函数作为参数，这种函数就称之为高阶函数
def add(x, y, z):
	return z(x) + z(y)
result = add(-9, 2, abs)
print('add(-9, 2, abs) =', result)
#编写高阶函数，就是让函数的参数能够接收别的函数。       把函数作为参数传入，这样的函数称为高阶函数，函数式编程就是指这种高度抽象的编程范式。
print('-----------------------------------------')

#map/reduce----------------

add file at company