鱼C论坛

 找回密码
 立即注册
查看: 2111|回复: 0

[技术交流] 20 函数:lambda表达式 - 景命

[复制链接]
发表于 2017-7-13 00:06:22 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 景命 于 2017-7-13 00:12 编辑

知识点:

  • lambda表达式:

            Python允许使用lambda关键字来创建匿名函数(匿名函数:所谓匿名,意即不再使用def语句这样标准的形式定义一个函数。)。
           
            使用lambda表达式格式:
                    函数名 = lambda 函数参数:函数返回值(函数语句)
    例:
    >>> def ds(x):
            return x * 2 + 1
    
    >>> ds(5)
    11
    #将函数ds()改变为lambda关键字创建形式
    >>> s = lambda x : x * 2 + 1
    >>> s(5)
    11

    lambda表达式的作用:
            1.Python写一些执行代码时,使用lambda就可以省下定义函数的过程,比如说我们只是需要写个简单的代码来管理服务器的时间,我们就不需要专门的定义一个函数然后再写调用,使用lambda就可以使得代码更精简。
            2.对于一些比较抽象并且整个程序执行下来只需要调用一两次的函数,有时候给函数起个名字也是比较头疼的事情,使用lambda就不需要考虑命名问题了。
            3.简化代码的可读性,由于普通的屌丝函数阅读经常要跳到开头的def定义部分,使用lambda表达式可以省去这样的步骤。








  • filter()函数:

            filter(过滤器)函数,用于过滤序列,过滤掉不符合条件的元素,返回由符合条件元素组成的新列表。如果第一个参数是一个函数的话,则将第二个可迭代对象里的每个参数,作为函数的参数进行计算,将返回True的值给筛选出来,并组成列表。如果第一个参数为None,那么就将第二个参数里为True的值给筛选出来。
            参数:filter(function or None,iterable),
                    function or None : 参数一可以是函数或者None对象。
                    iterable:参数二是可迭代对象。
            返回值:返回一个列表。如果第一个参数是函数的话,那么将能让函数返回值为真的参数返回。否则返回可迭代对象中为真的值。
    例:
            1):
    >>> s = filter(None,[1,2,3,0,False,True])
    >>> s
    <filter object at 0x0000000002FE6748>        #此时查看s,发现s为一个filter的对象。
    >>> s = list(s)                #将变量s转换为列表。
    >>> s
    [1, 2, 3, True]

            2)
    >>> def a(x):
            '筛选奇数函数。'
            return x % 2        #如果x除2余0的话,那么返回值为0。
    
    >>> list(filter(a,range(10)))        #如果返回值为0,那么不会filter函数就不会将能让函数a返回值为零的参数返回。(好绕的样子)
    [1, 3, 5, 7, 9]



    lambda表达式和filter()函数结合使用:

            list(filter(lambda 函数参数 : 函数返回值 , 可迭代对象)),即在filter函数里用lambda表达式直接定义匿名函数。
    >>> list(filter(lambda x : x % 2,range(10)))        #将例2)精简为1行
    [1, 3, 5, 7, 9]













  • map(function , iterable , ……)函数:

    在编程中一般解释为映射。类似于filter()方法(可以理解为filter函数的简化版),第一个参数为函数,第二个参数为一个或者多个序列。将序列中的每一个元素作为函数的参数,返回每次调用函数的返回值组成的新列表。
           
            参数:
                    function:函数。
                    iterable:一个或者多个可迭代对象。
            返回值:返回每次调用函数的返回值组成的新列表。

    例:
    >>> def a(x):
            return x % 2 == 0
    
    >>> list(map(a,range(10)))
    [True, False, True, False, True, False, True, False, True, False]

            也可以和lambda表达式结合使用:
    >>> list(map(lambda x : x % 2,range(3)))
    [0, 1, 0]















  • 参数并行问题:
    >>> def a(x,y,z):
            return x * 100 + y * 10 + z
    
    >>> list(map(a,range(1,4),range(4,7),range(7,10))) #将 range(1,4),range(4,7),range(7,10) 这三个可迭对象中的值拿出来作为函数a的三个参数。
    [147, 258, 369]


    map()函数看上去类似于列表推导式
    >>> def a(x):
            return x + 10
    
    >>> print([a(i) for i in range(1,4)])        #列表推导式方式。
    [11, 12, 13]
    
    >>> list(map(a,range(1,4)))        #map()函数方式。
    [11, 12, 13]


    但实际上还是有差别的,列表推导式没有参数并行的方式,map()函数可以参数并行。

    >>> def a(x,y,z):
            return x * 100 + y * 10 + z
    
    >>> print([a(x,y,z) for x in range(1,4)for y in range(4,7)for z in range(7,10)])        #列表推导式方式
    [147, 148, 149, 157, 158, 159, 167, 168, 169, 247, 248, 249, 257, 258, 259, 267, 268, 269, 347, 348, 349, 357, 358, 359, 367, 368, 369]#参数是以循环嵌套的方式输入函数a()中的
    >>> list(map(a,range(1,4),range(4,7),range(7,10))) #map()函数方式。
    [147, 258, 369]#参数是以并行的方式输入的函数a()中的







评分

参与人数 2荣誉 +4 鱼币 +7 收起 理由
康小泡 + 3
小甲鱼 + 4 + 4 支持楼主!

查看全部评分

本帖被以下淘专辑推荐:

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-24 20:13

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表