美文网首页程序员
匿名函数与lambda

匿名函数与lambda

作者: Gaterny | 来源:发表于2018-01-11 23:40 被阅读0次

    lambda函数介绍

    • python允许使用lambda关键字来创造匿名函数,lambda是一个表达式,也可以说是一个匿名函数。
    lambda [arg1[, arg2, ... argN]]: expression
    # expression:不能包含分支或循环(但允许条件表达式),也不能包含return(或yield)函数。如果为元组,则应用圆括号将其包含起来。
    
    • lambda 函数可以接收任意多个参数 (包括可选参数) 并且返回单个表达式的值。包含的表达式不能超过一个。参数是可选的,如果使用参数的话,参数通常也是表达式的一部分。
    # 单行语句不带参数
    def true(): 
        return True
    
    # 带参数
    def sum(x, y):
            return x + y
    
    # 条件表达式
    def foo(x):
        if x == 1:
            return 'yes'
        else:
            return 'no'
    
    • lambda表现形式:(没有参数返回一个True)
    lambda :True
    # 这里因为既没有保存lambda创建的函数,也没有调用它,因此它的引用计数由函数创建时的True为0,被垃圾回收掉。
    
    lambda x, y: x + y
    # 将lambda表达式的值赋值给元组
    
    lambda x: 'yes' if x == 1 else 'no'
    # expression1 if A else expression2,如果A为True,条件表达式的结果为expression1,否则为expression2 
    
    • lambda也支持默认参数以及可变参数
    # 默认参数,这里默认y = 5
    >>> a = lambda x, y=5: x+y
    >>> a(0)
    5
    >>> a(1,7)
    8
    
    # 可变参数
    >>> b = lambda *x: x
    >>> b(2)
    (2,)
    >>> b(3, 1)
    (3, 1)
    

    lambda函数使用场合

    • 函数式编程:尽管 Python 算不上是一门纯函数式编程语言,但它本身提供了很多函数式编程的特性,像 map、reduce、filter、sorted 这些函数都支持函数作为参数,lambda 函数就可以应用在函数式编程中。
    # 按照元素的绝对值进行排序
    >>> a_list = [1, -2, 4, 0, 6]
    >>> sorted(a_list, key=lambda x: abs(x))
    [0, 1, -2, 4, 6]
    
    • 闭包:在一个函数中定义另一个函数,并且内部函数可以引用外部函数的参数和局部变量,每次调用外部函数都返回新的函数。
    >>> def my_add(n):
            return lambda x: x+n
    ...
    >>> add_3= my_add(3)
    >>> add_3(7)
    10
    

    注释:这里的lambda函数就是闭包,涉及到全局作用域和局部作用域。

    • 由于lambda函数的可读性较差,应避免在代码中大量使用。

    相关文章

      网友评论

        本文标题:匿名函数与lambda

        本文链接:https://www.haomeiwen.com/subject/nemznxtx.html