zoukankan      html  css  js  c++  java
  • 匿名函数及推导式

    匿名函数

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

    所谓匿名,意即不再使用 def 语句这样标准的形式定义一个函数。

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

      语法

      lambda 函数的语法只包含一个语句,如下:

      lambda [arg1 [,arg2,.....argn]]:expression

      如下实例:

      add=lambda x,y:x+y
      ret=add(3,5)
      print(ret)
      dic={'k1':10,'k2':30,'k3':15}
      print(max(dic,key=lambda k :dic[k]))
      
      l=[1,2,3,4]
      
      print(list(map(lambda x:x*x,l)))
      
      print(list(filter(lambda x: x>3,l)))
      
      
      t1=(('a'),('b'))
      t2=(('c'),('d'))
      
      func=lambda t1,t2:[{i:j} for i,j in zip(t1,t2)]
      ret=func(t1,t2)
      print(ret)

      以上输出结果:

      8
      
      k2
      
      [1, 4, 9, 16]
      
      [4]
      
      [{'a': 'c'}, {'b': 'd'}]
      
      Process finished with exit code 0

      关键字lambda表示匿名函数,冒号前面的x表示函数参数。

        匿名函数有个限制,就是只能有一个表达式,不用写return,返回值就是该表达式的结果。

        用匿名函数有个好处,因为函数没有名字,不必担心函数名冲突。此外,匿名函数也是一个函数对象,也可以把匿名函数赋值给一个变量,再利用变量来调用该函数;同样,也可以把匿名函数作为返回值返回。

    列表推导式

    例一:30以内所有能被3整除的数

    multiples = [i for i in range(30) if i % 3 is 0]
    print(multiples)
    # Output: [0, 3, 6, 9, 12, 15, 18, 21, 24, 27]

    例二:30以内所有能被3整除的数的平方

    def squared(x):
        return x*x
    multiples = [squared(i) for i in range(30) if i % 3 is 0]
    print(multiples)

    例三:找到嵌套列表中名字含有两个‘e’的所有名字

    names = [['Tom', 'Billy', 'Jefferson', 'Andrew', 'Wesley', 'Steven', 'Joe'],
             ['Alice', 'Jill', 'Ana', 'Wendy', 'Jennifer', 'Sherry', 'Eva']]
    
    print([name for lst in names for name in lst if name.count('e') >= 2])  # 注意遍历顺序,这是实现的关键

    字典推导式

    例一:将一个字典的key和value对调

    mcase = {'a': 10, 'b': 34}
    mcase_frequency = {mcase[k]: k for k in mcase}
    print(mcase_frequency)

    例二:合并大小写对应的value值,将k统一成小写

    mcase = {'a': 10, 'b': 34, 'A': 7, 'Z': 3}
    mcase_frequency = {k.lower(): mcase.get(k.lower(), 0) + mcase.get(k.upper(), 0) for k in mcase.keys()}
    print(mcase_frequency)

    集合推导式

    例:计算列表中每个值的平方,自带去重功能

    squared = {x**2 for x in [1, -1, 2]}
    print(squared)
    # Output: set([1, 4])

    练习题:

    例1:  过滤掉长度小于3的字符串列表,并将剩下的转换成大写字母

    例2:  求(x,y)其中x是0-5之间的偶数,y是0-5之间的奇数组成的元祖列表

    例3:  求M中3,6,9组成的列表M = [[1,2,3],[4,5,6],[7,8,9]]

    1.[name.upper() for name in names if len(name)>3] 
    2.[(x,y) for x in range(5) if x%2==0 for y in range(5) if y %2==1] 
    3. [row[2] for row in M] 
  • 相关阅读:
    SQL server 2005 创建数据库失败提示“Collation <服务器默认值> is not valid”解决方法
    ACM PKU 1011 Sticks 深度优先搜索
    pku1088 滑雪
    javascript 使用金山词霸网络翻译
    JQuery基础 document.ready
    遍历aspx页面中所有的指定控件
    DataTable,DataView和DataGrid中一些容易混淆的概念
    C#中的DBNull、Null、和String.Empty解释
    哈佛大学管训
    美国教育考试中心公布2010年托业考试时间表
  • 原文地址:https://www.cnblogs.com/zhangningyang/p/7279901.html
Copyright © 2011-2022 走看看