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'}]

  • 相关阅读:
    Linux内核RPC请求过程
    二分图
    Java实现 蓝桥杯 算法提高 合并石子
    Java实现 蓝桥杯 算法提高 合并石子
    Java实现 蓝桥杯 算法提高 摩尔斯电码
    Java实现 蓝桥杯 算法提高 摩尔斯电码
    Java实现 蓝桥杯 算法提高 文本加密
    Java实现 蓝桥杯 算法提高 文本加密
    Java蓝桥杯 算法提高 九宫格
    Java蓝桥杯 算法提高 九宫格
  • 原文地址:https://www.cnblogs.com/liusouthern/p/8214108.html
Copyright © 2011-2022 走看看