函数式编程
函数式编程就是一种抽象程度很高的编程范式,纯粹的函数式编程语言编写的函数没有变量,因此,任意一个函数,只要输入是确定的,输出就是确定的,这种纯函数我们称之为没有副作用。
函数式编程的一个特点就是,允许把函数本身作为参数传入另一个函数,还允许返回一个函数。Python对函数式编程提供部分支持。由于Python允许使用变量,因此,Python不是纯函数式编程语言。
高阶函数
如果一个函数就可以接收另一个函数作为参数,这种函数就称之为高阶函数。
def add(x, y, f):
return f(x) + f(y)
map()
函数
map()
函数接收两个参数,一个是函数,一个是Iterable
对象,map
将传入的函数依次作用到序列的每个元素,并把结果作为新的Iterator
对象返回。
>>> def f(x):
... return x*x
...
>>> g=map(f,[1,2,3])
>>> next(g)
1
>>> list(g) #list与iter相反,可以把Iterator变成Iterable,如果该g无限大,将会内存溢出
[4, 9]
>>>
reduce()
函数
reduce
把一个函数作用在一个Iterable
对象上,这个函数必须接收两个参数,reduce
把结果继续和序列的下一个元素做累积计算,其效果就是:
reduce(f, [x1, x2, x3, x4]) = f(f(f(x1, x2), x3), x4)`
序列求和:
>>> def f(x,y):
... return x+y
...
>>> from functools import reduce
>>> reduce(f,[1,2,3]) #如果第二个参数是一个Iterator并且无穷大,将会内存溢出
6
>>>
filter()
函数
类似js数组的filter函数,用于过滤序列,其返回的时一个Iterator对象。
>>> def g(n):
... while(n>0):
... yield n
... n=n-1
...
>>> def is_odd(x):
... return x%2==1
...
>>> list(filter(is_odd,g(10)))
[9, 7, 5, 3, 1]
>>> list(filter(is_odd,[1,2,3,4,5]))
[1, 3, 5]
>>>
sorted()
函数
用于排序,第二个关键字参数key可以接受一个函数作为排序依据,第三个关键字reverse参数是个Boolean
值,可以改变排序顺序。
>>> sorted([2,1,3])
[1, 2, 3]
>>> sorted([2,1,-3],key=abs)
[1, 2, -3]
>>> sorted([2,1,-3],key=abs, reverse=True)
[-3, 2, 1]
>>> def f(x): #自定义函数只接收一个参数
... if(x<0):
... return -x
... else:
... return x
...
>>> sorted([2,-3,1],key=f)
[1, 2, -3]
>>>