zoukankan      html  css  js  c++  java
  • 匿名函数:lambda

    匿名函数定义

    Python,有两种函数一种是def定义一种是lambda函数

    假如要求两个数之和,用普通函数或匿名函数如下:

    运用普通函数:

    def func(x): 
      return x>3                                              
    a=filter(func,[1,2,3,4,5]) print(a) #利用filter函数得到的是一个迭代器 for i in a: print(i)
    得到结果:
    <filter object at 0x0000000002704358> 4 5

    匿名函数:

    # a=filter(lambda x:x>3,[1,2,3,4,5])
    # print(a)
    # for i in a:
    #     print(i)
    得到结果:
    <filter object at 0x0000000002704358>    
    4
    5

    上面的例子中:

    x 为lambda函数的一个参数
    : 分割符
    x>3 则是返回值,在
    lambda函数中不能有return,其实:后面就是返回值

    #def func(x):
    #    return x 
    #func()
    等价于下面:
    lambda x:x
    >3

    为什么要用匿名函数?

    1. 程序一次行使用,所以不需要定义函数名,节省内存中变量定义空间

    2. 如果想让程序更加简洁时。一般应用于函数式编程

    匿名函数的参数

    不带参数匿名函数
    >>> >>> t = lambda : True #分号前无任何参数
    >>> t()
    True

    带参数匿名函数
    >>> lambda x: x**3 #一个参数
    >>> lambda x,y,z:x+y+z #多个参数 >>> lambda x,y=3: x*y #允许参数存在默认值

    匿名参数的运用

    可以和内置函数 min、 max、 filter、 map 、sorted 配合使用
    # def func(x):
    # return x>10

    # res = filter(func,[5,8,11,9,15]) # for i in res: # print(i)
    等价于
    # res = filter(lambda x:x>10,[5,8,11,9,15])
    # for i in res:
    # print(i)
    
    
    11
    15
     
    #def func(x)
    #  return x**2
    #func()

    等价于
    # ret = map(lambda x:x**2,[-1,2,-3,4])

    # for i in ret:
    #  print(i)
    1
    4
    9
    16
    dic={'k1':10,'k2':100,'k3':30}
    def func(key):
        return dic[key]
    print(max(dic,key=func))   #根据返回值判断最大值,返回值最大的那个参数是结果
    print(max(dic,key=lambda key:dic[key]))

    k2
    可以和三元运算搭配使用
    >>> (lambda x,y: x if x> y else y)(101,102)    #直接后面传递实参
    102 

      判断字符串是否以某个字母开头

    >>> print (lambda x: x.startswith('B'))('Bob')
    True

       嵌套使用

    #lambda嵌套到普通函数中,lambda函数本身做为return的值
    
    ------
    
    >>> def k(n):
    ... return lambda x: x+n
    ...
    >>> f=k(4)
    >>> f(2)
    6

     现有两元组(('a'),('b')),(('c'),('d')),
     请使用python中匿名函数生成列表[{'a':'c'},{'b':'d'}]

    # ret = zip((('a'),('b')),(('c'),('d')))       利用zip()可以得到<zip object at 0x0000000001EB3948>   
    # res = map(lambda i:{i[0]:i[1]},ret)
    # print(list(res))
    [{'a':'c'},{'b':'d'}]

  • 相关阅读:
    docker run 参数含义
    java——数组队列 ArrayQueue
    java——数组栈 ArrayStack
    java——时间复杂度、动态数组
    java——异常类、异常捕获、finally、异常抛出、自定义异常
    java——变量
    java——虚拟机、线程
    java——内部类
    java——object类
    java——抽象类、接口、二者区别
  • 原文地址:https://www.cnblogs.com/liusouthern/p/8214108.html
Copyright © 2011-2022 走看看