函数式编程
函数式编程 |
函数式编程的一大特点就是,允许把函数本身作为参数传入另一个函数,并且允许返回一个函数。
一、高阶函数
把函数作为参数传入另一个函数,这样的函数被称为高阶函数。
def foo(n): print(n) def bar(name): print('my name is %s' %name) foo(bar('alex'))
在高阶函数foo()函数中,bar变量是一个函数,调用foo()时,可将bar()函数名作为参数传入。
执行以上程序,得到计算结果:
my name is alex None
None表示无返回值默认给的值
二、内置高阶函数
1.map()函数
map()函数可以接收两个参数:一个参数是函数;另外一个参数是可迭代的对象。map()函数将传入的函数依次作用到传入可迭代对象的每一个元素上,得到一个新的可迭代对象并返回。
假设想要计算一个列表中每个整数的平方数,我们的常用的做法是:
num_l = [1,3,5,6] def f(x): return x*x def map_test(func,array): ret = [] for i in array: res = func(i) ret.append(res) return ret print(map_test(f,num_l)) #结果为[1, 9, 25, 36]
但使用map()函数来实现这个计算,即:
num_l = [1,3,5,6] ret = map(lambda x:x*x,num_l) print(list(ret)) #结果为[1, 9, 25, 36]
2.reduce()函数
类似于map()函数,reduce函数可以把一个函数作用在一个序列上,与map()的区别在于,这个传入的函数必须具有两个参数,可以使用reduce()实现累加效果:
from functools import reduce #使用reduce()函数必须写上这句代码 num_l = [1,3,5,6] ret = reduce(lambda x,y:x+y,num_l) print(ret) #结果为:15
3.filter()函数
Python内建的filter()函数用于过滤序列。与map()函数类似,filter()函数也接收一个函数和一个序列。不同之处在于,filter()函数把传入的函数依次作用于每个元素,然后根据返回值是True还是False决定是保留还是丢弃该元素。
假设,删除列表中的奇数,保留偶数可以通过如下程序实现,则:
num_l = [1,2,3,5,6,8] ret = filter(lambda x:x%2==0,num_l) print(list(ret)) #结果为:[2,6,8]