python匿名函数:lambda

python匿名函数:lambda

  • 关键字lambda

    python使用lambda关键字来创造匿名函数,即不再使用def的语句这样标准形式定义一个函数,语法:

    lambda [arg1[,arg2, ... argN]]:expression
  • 例子

    $ python
    Python 3.5.2 (default, Nov 23 2017, 16:37:01) 
    [GCC 5.4.0 20160609] on linux
    Type "help", "copyright", "credits" or "license" for more information.
    >>> def add(a, b):
    ...   return a + b
    ... 
    >>> print (add(3,5))
    8
    >>> #等价lambda写法,一般不会绑定名字
    ... 
    >>> add = lambda x, y : x + y
    >>> add(3,5)
    8
    >>> 
    

    lambda x,y : x+y 中,x,y是函数的两个参数,冒号后面的表达式是函数的返回值。通常情况下,使用匿名函数是不给其绑定名字的。

  • 使用场景

    函数式编程

    python提供了很多函数式编程的特性,像map、reduce、filter、stored这些函数都支持函数作为参数。lambda函数就可以引用在函数式编程中。

    >>> #绝对值排序
    ... 
    >>> abs_sorte = [1, 2, -4, 9, -8]
    >>> sorted(abs_sorte, key = lambda x: abs(x))
    [1, 2, -4, -8, 9]
    >>> #等价function
    ... 
    >>> def abss(x):
    ...   return abs(x)
    ... 
    >>> sorted(abs_sorte, key = abss)
    [1, 2, -4, -8, 9]
    >>> 

    闭包 :一个定义在函数内部的函数

    >>> #lambda函数作为闭包
    ... 
    >>> def add(x):
    ...   return lambda t: x + t
    ... 
    >>> add_1 = add(3)
    >>> add_1(10)
    13
    >>> 
    

    在全局作用域中,add_1(10)可以正常执行返回结果,结果是13是因为在add的局部作用域中,变量t的值在闭包的作用使其可以在全局作用域中被访问到。

    >>> #常规函数实现闭包
    ... 
    >>> 
    >>> def add(n):
    ...   def addp(x):
    ...    return x + n
    ...   return addp
    ... 
    >>> add_1 = add(3)
    >>> add_1(10)
    13
    >>> 
    

    当然,并不是所有情况lambda函数都比常规函数更清晰,如果使用lambda函数不能使代码变得更清晰,就要使用常规的方法定义函数。

    Just as : Explicit is better than implicit

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值