• lambda 与filter


    1. lambda

    Python使用lambda来创建匿名函数。

    • lambda只是一个表达式,函数体比def简单很多。
    • lambda的主体是一个表达式,而不是一个代码块。仅仅能在lambda表达式中封装有限的逻辑进去。
    • lambda函数拥有自己的命名空间,且不能访问自有参数列表之外或全局命名空间里的参数。
    • 虽然lambda函数看起来只能写一行,却不等同于C或C++的内联函数,后者的目的是调用小函数时不占用栈内存从而增加运行效率。
      func=lambda x:x+2
      print(func(1))
      #3
      print(func(2))
      #4
       
      #以上lambda等同于以下函数
      def func(x):
          return(x+2)

    可以这样理解:lambda作为一个表达式,定义了一个匿名函数。上例中代码x为函数入口参数,x+2为函数体。用lambda写法,简化了函数定义的书写形式,使代码更为简洁。

    在Python中,还有几个定义好的全局函数:filter()、map()、reduce()。这些全局函数可以和lambda配合使用。

    2. filter()用法。

    filter(函数,序列)函数用于过滤序列,过滤掉不符合条件的元素,返回由符合条件元素组成的新列表。

    该函数接收两个参数,第一个为函数,第二个为序列,序列的每个元素作为参数传递给函数进行判断,然后返回 True 或 False,最后将返回 True 的元素放到新列表中。

    注意:Python2.7返回的是列表,Python3.x返回的是迭代器对象。

    举例子:

    def is_odd(n):
        return n%2==1
     
    newlist = filter(is_odd,[1,2,3,4,5,6,7,8,9,10])
    print(newlist)
    # Python3.6结果:<filter object at 0x00000184ED881358>
    # Python2.x结果:[1, 3, 5, 7, 9]
     
    # Python3.6返回的是迭代器对象,可以转换成list
    print(list(newlist))
    # [1, 3, 5, 7, 9]
     
    # -------------------------------------------
     
    # 以上函数可以用lambda表达式书写
    newlist = list(filter(lambda n:n%2==1,[1,2,3,4,5,6,7,8,9,10]))
    print(newlist)
    # [1, 3, 5, 7, 9]
     
    # -------------------------------------------
     
    # 在对象遍历处理方面,其实Python的for..in..if语法已经很强大,并且在易读上胜过了lambda。
    # 以上函数还可以写成如下:
    newlist = list(x for x in [1,2,3,4,5,6,7,8,9,10] if x%2==1)
    print(newlist)
    # [1, 3, 5, 7, 9]

    上面例子中的filter()的作用,非常简单清晰。但是,Python是否非要使用lambda才能做到这样的简洁程度呢?在对象遍历处理方面,其实Python的for..in..if语法已经很强大,并且在易读上胜过了lambda。 

    上面的例子还可以写成: newlist = list(x for x in [1,2,3,4,5,6,7,8,9,10] if x%2==1),是比lambda的方式更容易理解。

    参考:https://blog.csdn.net/program_developer/article/details/82024468

  • 相关阅读:
    js 判断是否包含
    react-navigation-easy-helper
    mobx 小结
    react native使用 mobx , can't find variable:Symbol
    react-native 极光推送(jpush-react-native)
    react-native 启动页(react-native-splash-screen)
    react-native Android 全面屏手机 底部留有一大块黑屏
    RAP + MOCK
    ES7新特性
    POP动画[2]
  • 原文地址:https://www.cnblogs.com/lxgbky/p/13738473.html
Copyright © 2020-2023  润新知