• 函数编程——匿名函数与lambda(一)


    python允许用lambda关键字创造匿名函数。

    匿名函数是因为不需要以标准的方式来声明,比如说,使用def语句。

    但是,作为函数,它们也能有参数。

    一个完整的lambda“语句”代表了一个表达式,这个表达式的定义体必须和声明放在同一行。

    参数时可选的,如果使用参数的话,参数通常也是表达式的一部分。

    核心知识点:

    用合适的表达式调用一个lambda生成一个可以像其他函数一样使用的函数对象

    它们可以被传给其他函数,用额外的引用别名化,作为容器对象以及可调用的对象被调用。(如果需要,可以带参数)

    当被调用的时候,如果给定相同的参数的话,这些对象会生成一个和相同表达式等阶的结果。

    它们和那些等价表达式计算值相同的函数是不能区分的。

    可以来看个简单的例子:

    >>> def true():   
    ...     return True
    ...
    
    >>> lambda:True
    <function <lambda> at 0x000002B6A99BBF28>
    >>> TRUE = lambda:True
    
    #上面都是创建两个总是返回True的函数
    >>> true()
    True
    
    >>> TRUE() 
    True
    #可以发现结果完全是相同的

    上面的例子说明,使用匿名函数完全是行得通的。

    我们还可以将lambda表达式赋值给一个如列表和元祖的数据结构,同时默认以及可变的参数也是允许的。

    >>> def kebi(x,y=2):  #我可以设置默认值
    ...     return x+y
    ...
    
    >>> a = lambda x,y =2:x+y  #我也可以设置默认值
    
    #上面两个函数功能一样
    
    >>> def maoxian(*z):return z   #参数收集返回元祖
    ...
    >>>
    >>> b = lambda *z:z    #收集我也可以
    
    #上面两个函数功能也一样
    
    #光说不练可不行
    >>> a(3)   #有默认值
    5
    >>> a(4,5)
    9
    >>> kebi(3)
    5
    >>> kebi(4,5)
    9
    
    >>> maoxian(1,2,'z','iu13')  #函数定义的只有一个参数,却可以收集多个到一个元祖里面
    (1, 2, 'z', 'iu13')
    >>> b(1,2,'z','iu13')
    (1, 2, 'z', 'iu13')

    最后再来阐述一个问题,为什么要给函数赋值一个变量?

    >>> a = lambda x,y =2:x+y

    之前在使用传统函数的总是不明白为啥要赋值?

    我们可以把每个函数看作是一个对象,漂浮在内存中。

    我们虽然创建了一个函数,但没有地方保存它,也没有调用它。

    这个函数在创建的时候引用计数被设置为True,但是如果,没有引用,计数又会回到零,这样就会被垃圾回收。

    为了保存对象,可以把它赋值到一个变量上,以后也就可以随时调用,也不会自动被删除了。

  • 相关阅读:
    #考研碎碎念#
    #考研笔记#计算机之病毒
    #考研笔记#计算机之多媒体应用
    #考研笔记#计算机之PPT问题
    第六章深入理解类
    第五章方法
    类的基本教程
    类型存储变量
    C#和.net框架
    C#编程概述
  • 原文地址:https://www.cnblogs.com/yangmingxianshen/p/7764408.html
Copyright © 2020-2023  润新知