函数式编程

函数式编程

函数式编程的一大特点就是,允许把函数本身作为参数传入另一个函数,并且允许返回一个函数。

一、高阶函数 

把函数作为参数传入另一个函数,这样的函数被称为高阶函数。

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]

 

posted @ 2019-07-12 14:11  流浪代码  阅读(339)  评论(0编辑  收藏  举报