函数式编程
函数式编程(Functional Programming),是一种抽象程度很高的编程范式,纯粹的函数式编程语言编写的函数没有变量。因此,任意一个函数,只要输入是确定的,输出就是确定的。
函数式编程是一种"编程范式"(programming paradigm)。它属于"结构化编程"的一种,主要思想是把运算过程尽量写成一系列嵌套的函数调用。
函数式编程的一个特点就是,允许把函数本身作为参数传入另一个函数,还允许返回一个函数!Python对函数式编程提供部分支持。由于Python允许使用变量,因此,Python不是纯函数式编程语言。
更多内容
廖雪峰Python教程 函数式编程
函数式编程初探 - 阮一峰
函数式编程 - 看云
函数式编程 - 百度百科
高阶函数
函数式编程中,可以将函数当作变量一样使用。接受函数为参数,或者把函数作为结果返回的函数称为高阶函数(Higher-order Functions) 。
def double(x):
return 2 * x
def square(x):
return x * x
def func(g, arr):
return [g(x) for x in arr]
arr1 = func(double, [1, 2, 3, 4])
arr2 = func(square, [1, 2, 3, 4])
arr1
[2, 4, 6, 8]arr2
[1, 4, 9, 16]
map()/reduce()/filter()/sorted() /apply() 是 Python 中较为常用的高阶函数,它们为函数式编程提供了不少便利。
Python 3 中,map 和 filter 还是内置函数,但是由于引入了列表推导和生成器表达式,它们变得没那么重要了。列表推导或生成器表达式具有 map 和 filter 两个函数的功能,而且更易于阅读。apply 函数在Python 2.3 中标记为过时,在Python 3 中移除了,因为不再需要它了。如果想使用不定量的参数调用函数,可以编写 fn(*args, **keywords),不用再编写 apply(fn, args,kwargs)。
map()
map 函数将传入的函数依次作用到序列的每个元素,并把结果作为新的 Iterator 返回。map 函数语法:
map(function, iterable, …)
参数 —— function : 函数 ; iterable : 一个或多个序列
返回值 —— Python 2.x 返回列表; Python 3.x 返回迭代器(map)
def square(x): # 计算平方数
return x ** 2
map(square, [1,2,3,4,5]) # 计算列表各个元素的平方
<map object at 0x000001B9F81ADEB8>map(lambda x: x ** 2, [1, 2, 3, 4, 5]) # 使用 lambda 匿名函数
[1, 4, 9, 16, 25] # python2输出结果
<map object at 0x000001B9F81ADEB8> # python3输出结果(可使用list()函数对map函数返回结果进行转换)
list(map(lambda x: x ** 2, [1, 2, 3, 4, 5]))
[1, 4, 9, 16, 25]