• python中lambda,map,reduce,filter,zip函数



    ###函数式编程

    函数式编程(Functional Programming)或者函数程序设计,又称泛函编程,是一种编程范型,它将计算机运算视为数学上的函数计算,并且避免使用程序状态以及易变对象。简单来讲,函数式编程是一种“广播式”的编程,一般结合前面提到过的lambda定义函数,用于科学计算中,会显得特别简洁方便。

    在Python中,函数式编程主要由几个函数的使用构成:lambda()、map()、reduce()、filter(),zip()。


    ###列表解析 列表解析在python中能够简化我们对列表内元素逐一进行操作的代码,也称列表推导式,可以替代函数简化表达。

    具体例子:

    a = [1, 2, 3,4,5]
    b = []
    for i in a:
        b.append(i *2)
    

    使用列表解析表示方式:

    a = [1, 2, 3,4,5]
    b = [i*2 for i in a]
    

    从上面的式子来看,列表解析的表达比for循环要来得简洁。


    ###lambda()函数 lambda是Python支持一种有趣的语法,它允许你快速定义单行的最小函数,类似与C语言中的宏,可以用在任何需要函数。
    f = lambda x: x * 2
    f(3)
    #结果为6
    

    ###map()函数

    先定义一个函数,然后再用map()命令将函数逐一应用到(map)列表中的每个元素,最后返回一个数组。map()命令也接受多参数的函数,
    map函数格式为map(function,sequence)
    把sequence中的值当参数逐个传给function,返回一个包含函数执行结果的list。
    如果function有两个参数,即map(function,sequence1,sequence2)。

    如map(lambda x,y:x*y,a,b)表示将a、b两个列表的元素对应相乘,把结果返回给新列表。

    假设有一个列表a=[1,2,3],要给列表中的每个元素都加2得到一个新列表

    b = map(lambda x: x+2, a)
    b = list(b) 
    #结果是[3, 4, 5]
    

    有了列表解析,为什么还要有map()命令呢?
    其实列表解析虽然代码简短,但是本质上还是for命令,而Python的for命令效率并不高,而map()函数实现了相同的功能,并且效率更高,原则上来说,它的循环命令速度相当于C语言。


    ###reduce()函数

    reduce()函数。它有点像map()函数,但map()函数用于逐一遍历,而是reduce()函数用于递归计算。
    reduce函数格式为reduce(function,sequence)
    function接收的参数个数只能为2
    先把sequence中第一个值和第二个值当参数传给function,再把function的返回值和第三个值当参数传给
    function,然后只返回一个结果。

    具体例子如下

    s = 1
    for i in range(1, 5):
         s = s * i
    

    上面是一个1到4的阶乘,如果换成reduce函数可以简化为:

    reduce(lambda x,y: x*y, range(1, 5))
    

    其中,lambda x,y:x*y构造了一个二元函数,返回两个参数的乘积。reduce命令首先将列表的前两个元素作为函数的参数进行运算,然后将运算结果与第三个数字作为函数的参数,然后再将运算结果与第四个数字作为函数的参数……依此递推,直到列表结束,返回最终结果。


    ###filter()函数

    filter()函数。顾名思义,它是一个过滤器,用来筛选出列表中符合条件的元素。
    filter函数格式为filter(function,sequence)
    function的返回值只能是True或False
    把sequence中的值逐个当参数传给function,如果function(x)的返回值是True,就把x加到filter的返回值里面。

    具体例子如下:

    b=[]
    for i in range(10):
         if i >3 and <6:
            b.append(i) 
    

    使用filte()函数实现以上目的的语句如下:

    b=filter(lambda x:x>3 and x<6 ,range(10))
    b=list(b)
    

    整体上比for循环要简洁不是,而且速度上要比循环来得快。


    ###zip()函数

    返回一个元祖列表,该元祖按顺序包含每个序列的相应元素,以最小的一个为准。
    zip函数格式为zip(sequence1,sequence2,..)

    具体例子如下:

    a=[1,2,3]
    b=[5,6]
    
    for i,j in zip(a,b):
         print(i,j)
    
    #结果为(1,5)  (2,6)
    

    在python中,把很多内置函数结合起来使用,可以使用很少的代码来实现很多复杂的功能,结合匿名函数,列表解析一起使用,功能更加强大.使用内置函数最显而易见的好处是:
    速度快,使用内置函数,比普通的PYTHON实现,速度要快一倍左右,还有就是代码简洁。

  • 相关阅读:
    [办公自动化]企业网IE多版本引发的网页无法访问
    [每天想一想]如果你的领导不懂技术,你该怎么办?
    [思考]我们应该怎样建设企业IT
    [读书笔记]流畅的Python(Fluent Python)
    [办公自动化]网件交换机管理软件
    PCRE函数简介和使用示例
    pcre7.0在vc6.0编译
    Luogu P2173 [ZJOI2012]网络
    tensorflow学习笔记2
    python数据可视化7
  • 原文地址:https://www.cnblogs.com/wkslearner/p/9836247.html
Copyright © 2020-2023  润新知