• [Python Study Notes]匿名函数


    Python 使用 lambda 来创建匿名函数

    lambda这个名称来自于LISP,而LISP则是从lambda calculus(一种符号逻辑形式)取这个名称的。
    在Python中,lambda作为一个关键字,作为引入表达式的语法。想比较def函数,lambda是单一的表达式,而不是语句块!

    所谓匿名,意即不再使用 def 语句这样标准的形式定义一个函数

    • lambda 只是一个表达式,函数体比 def 简单很多。
    • lambda的主体是一个表达式,而不是一个代码块。仅仅能在lambda表达式中封装有限的逻辑进去。
    • lambda 函数拥有自己的命名空间,且不能访问自己参数列表之外或全局命名空间里的参数。
    • 虽然lambda函数看起来只能写一行,却不等同于C或C++的内联函数,后者的目的是调用小函数时不占用栈内存从而增加运行效率。

    匿名函数优点

    • 使用Python写一些脚本时,使用lambda可以省去定义函数的过程,让代码更加精简。
    • 对于一些抽象的,不会被别的地方再重复使用的函数,有时候函数起个名字也是个难题,使用lambda不需要考虑命名的问题
    • 使用lambda在某些时候然后代码更容易理解

    语法
    lambda 函数的语法只包含一个语句,如下:

    lambda [arg1 [,arg2,.....argn]]:expression
    
    #  lambda 参数列表:return [表达式] 变量
    #  由于lambda返回的是函数对象(构建的是一个函数对象),所以需要定义一个变量去接收

    应用实例:

    实例1:

    # sum加法函数
    sum = lambda arg1, arg2: arg1 + arg2
    # 调用sum函数
    print("结果为 : %0.1f" %sum(10, 20))
    # -----------输出----------------------
    # 结果为 : 30.0
    # ------------------------------------

    实例2:

    # 排序中的应用
    infors = [{"name":"宋长武","age":23},{"name":"刘洋","age":22},
              {"name":"施名阳","age":24},{"name":"马云伟","age":23}]
    # 使用匿名函数,根据age对字典排序
    infors.sort(key=lambda x:x['age'])
    print(infors)
    
    # 或者使用sorted函数
    infors_new=sorted(infors,key=lambda x:x['age'])
    print(infors_new)
    # -----------输出----------------------
    # [{'name': '刘洋', 'age': 22}, {'name': '宋长武', 'age': 23}, {'name': '马云伟', 'age': 23}, {'name': '施名阳', 'age': 24}]
    # [{'name': '刘洋', 'age': 22}, {'name': '宋长武', 'age': 23}, {'name': '马云伟', 'age': 23}, {'name': '施名阳', 'age': 24}]
    # ------------------------------------
    

    实例3:

    # 将匿名函数当成变量是用
    def test(a,b,func):
        result = func(a,b)
        return result
    # 调用
    num = test(11,22,lambda x,y:x+y)
    print('结果为:%.1f'%num)
    # -----------输出----------------------
    # 结果为 : 33.0
    # ------------------------------------
  • 相关阅读:
    Intent flag 与启动模式的对应关系
    Activity的启动模式---总结
    NDK---使用,开发步骤
    自定义ViewGroup
    android:process结合activity启动模式的一次实践
    Java单元测试之覆盖率统计eclemma
    Java单元测试之JUnit篇
    结对编程1
    个人作业1——四则运算题目生成程序(基于控制台)
    Coding使用方法
  • 原文地址:https://www.cnblogs.com/liu66blog/p/8465698.html
Copyright © 2020-2023  润新知