• 【Python】Lambda表达式


    ✨博文作者 wangzirui32
    💖 喜欢的可以 点赞 收藏 关注哦~~
    👏 我的第163篇原创作品
    👉本文首发于CSDN,未经许可禁止转载


    hello,大家好,我是wangzirui32,今天我们来学习Python中Lambda表达式,开始学习吧!

    1. 什么是Lambda

    Lambda在Python编程中使用的频率非常高,这种表达式其实是Python中的一类特殊的定义函数的形式,使用它可以定义一个匿名函数。当你需要一个简单功能的函数,Lambda能满足大部分需求。

    2. Lambda语法

    Lambda语法格式如下:

    lambda 参数1, 参数2, ...., 参数n: 执行语句
    
    • 1

    示例代码:

    # 计算x的三次方
    f = lambda x: x**3
    print(f(3))
    
    • 1
    • 2
    • 3

    输出:

    27
    
    • 1

    注意,lambda语句中,冒号(:)后执行一个表达式,不需要用return返回结果,你可以使用if语句:

    # 判断是否为偶数 是偶数返回True 否则返回False
    f = lambda x: True if x % 2 == 0 else False
    print(f(10))
    print(f(11))
    
    • 1
    • 2
    • 3
    • 4

    输出:

    True
    False
    
    • 1
    • 2

    也可以指定多个参数:

    # 求x y z的平均值
    f = lambda x, y, z: (x+y+z)/3
    print(f(11, 45, 14))
    
    • 1
    • 2
    • 3

    输出:

    23.33333333333
    
    • 1

    3. Lambda高阶用法

    3.1 排序

    现有如下列表:

    students = [{"name": "John", "age": 10, "score": 87},
                {"name": "Sally", "age": 9, "score": 100},
                {"name": "James", "age": 13, "score": 95}]
    
    • 1
    • 2
    • 3

    需求:将列表中的学生信息分别按年龄和分数进行排序。
    我们可以使用lambda表达式和排序函数达成需求,代码:

    students = [{"name": "John", "age": 10, "score": 87},
                {"name": "Sally", "age": 18, "score": 100},
                {"name": "James", "age": 13, "score": 95}]
    
    # 这里的lambda返回学生的年龄作为排序依据
    students.sort(key=lambda student: student['age'])
    print("按年龄排序:", students)
    
    # 这里的lambda返回学生的分数作为排序依据
    students.sort(key=lambda student: student['score'], reverse=True)
    print("按分数排序:", students)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    输出结果:

    按年龄排序: [{'name': 'John', 'age': 10, 'score': 87}, ......]
    按分数排序: [{'name': 'Sally', 'age': 18, 'score': 100}, ......]
    
    • 1
    • 2

    3.2 序列映射

    现有如下列表:

    numbers = [1, 2, 3, 4, 5, 6, 7]
    
    • 1

    需求:将列表内的所有数字元素全部执行一次立方操作。
    我们可以结合map函数达成需求,代码:

    numbers = [1, 2, 3, 4, 5, 6, 7]
    # 这里的lamdba返回x的立方
    new_numbers = list(map(lambda x: x**3, numbers))
    print(new_numbers)
    
    • 1
    • 2
    • 3
    • 4

    输出:

    [1, 8, 27, 64, 125, 216, 343]
    
    • 1

    map函数可以用来映射序列,调用参数如下:

    map(映射函数, 序列列表)
    
    • 1

    映射过程类似于:

    numbers1234567
    映射
    new_numbers182764125216343

    3.3 过滤元素

    现有如下列表:

    numbers = [11, 4, 5, 14, 10, 32, 50, 19, 20]
    
    • 1

    需求:过滤出列表中10以上的偶数
    我们可以使用filter内置函数,代码:

    numbers = [11, 4, 5, 14, 10, 32, 50, 19, 20]
    new_numbers = list(filter(lambda x: x % 2 == 0 and x >= 10, numbers))  
    print(new_numbers)
    
    • 1
    • 2
    • 3

    输出:

    [14, 10, 32, 50, 20]
    
    • 1

    在这个lambda表达式内,我们限定了条件x % 2 == 0 and x >= 10,如果2个条件都满足,表达式结果为True,否则为False
    整个过程类似于:

    numbers1145141032501920
    是否符合条件FalseFalseFalseTrueTrueTrueTrueFalseTrue
    new_numbersNoneNoneNone14103250None20

    3.4 指定相邻元素的结合条件

    现有如下列表:

    students = ["John", "Jack", "James", "Malfoy", "Sally"]
    
    • 1

    需求:将每两个学生姓名之间添上","连接并输出。
    我们可以使用reduce函数,代码:

    from functools import reduce
    students = ["John", "Jack", "James", "Malfoy", "Sally"]
    print(reduce(lambda a, b: "{} , {}".format(a, b), students))
    
    • 1
    • 2
    • 3

    输出:

    John , Jack , James , Malfoy , Sally
    
    • 1

    3.5 函数装饰器

    当一个函数返回lambda匿名函数时,这就类似于Python中的函数装饰器了,示例代码:

    def welcome_text(text):
        return lambda username: "Welcome {}!\n{}".format(username, text)
        
    welcome_user = welcome_text("这里是wangzirui32的编程课堂!")
    print(welcome_user("Malfoy"))
    
    • 1
    • 2
    • 3
    • 4
    • 5

    输出:

    Welcome Malfoy!
    这里是wangzirui32的编程课堂!
    
    • 1
    • 2

    🎉🎉🎉 好了,今天的课程就到这里,我是wangzirui32,喜欢的可以点个收藏和关注,我们下次再见!

  • 相关阅读:
    Attingo:西部数据部分SSD存在硬件设计制造缺陷
    大势浏览器DasViewer里面的查询和选择功能,如何实现与矢量数据关联?
    k8s ingress基础
    Kvaser Leaf light HS v2 | 如何使用Excel发送和接收CAN报文数据
    pytorch中nn.functional和nn.Module的区别
    从零实现深度学习框架——衡量算法的基本指标
    Chapter4 利用机器学习解决分类和回归问题
    【数据结构】【项目】BitMap?40亿电话号码如何快速去重?
    Spring Boot Actuator(eureka xstream deserialization RCE)
    [计算机提升] Windows系统权限
  • 原文地址:https://blog.csdn.net/wangzirui32/article/details/125471607