lambda

作者: 超人不会飞_9664 | 来源:发表于2018-09-25 06:58 被阅读0次

    lambda简单来说就是可以一行代码定义一个函数,使代码更加简洁舒服。

    . 对于那些抽象的并且整个程序执行下来调用一两次的函数,有时候给函数起个名字也是比较头痛的问题,使用lambda就不需要考虑命名的问题了

    既然提到lambda,就顺便介绍两个牛逼的BIF

    filter()

    filter(function or None,iterable) ,如果第一个参数是函数,那么filter会把interable全部迭代一遍,如果结果为True,就筛选出来,

    a = list(filter(lambda n: not(n % 3),range(1,100)))
    

    执行结果

    a
    [3, 6, 9, 12, 15, 18, 21, 24, 27, 30, 33, 36, 39, 42, 45, 48, 51, 54, 57, 60, 63, 66, 69, 72, 75, 78, 81, 84, 87, 90, 93, 96, 99]
    

    看到这里是不是觉得用列表推导式也可以呢,那试一下

    a = [n for n in range(1,100) if n % 3 == 0]
    

    执行结果

    >>> a
    [3, 6, 9, 12, 15, 18, 21, 24, 27, 30, 33, 36, 39, 42, 45, 48, 51, 54, 57, 60, 63, 66, 69, 72, 75, 78, 81, 84, 87, 90, 93, 96, 99]
    

    上面是一个参数是函数时的表达,那要是None呢!再举个栗子

    filter(None,[1,0,False,True])
    a = list(filter(None,[1,0,False,True]))
    

    执行结果

    >>> a
    [1, True]
    

    可以看出,第一个参数有函数在时,就是将iterable放到函数里然后删选出True的值,再返回对应的iterable的值,如果是None就直接删选满足True里的iterable值

    map()

    也是两个参数,一个函数,一个可迭代对象/也可以有多个可迭代对象

    a = list(map(lambda x: x*2,range(10)))
    

    执行结果

    >>> a
    [0, 2, 4, 6, 8, 10, 12, 14, 16, 18]
    

    前面也说了map可以有多个可迭代对象

    a= list(map(lambda x,y:[x,y],[1,3,5,7,9],[2,4,6,8,10]))
    

    执行结果

    >>> a
    [[1, 2], [3, 4], [5, 6], [7, 8], [9, 10]]
    

    可以看出根据函数对制定序列做映射

    相关文章

      网友评论

          本文标题:lambda

          本文链接:https://www.haomeiwen.com/subject/qckkoftx.html