✨博文作者 wangzirui32
💖 喜欢的可以 点赞 收藏 关注哦~~
👉本文首发于CSDN,未经许可禁止转载
1. 什么是Lambda
Lambda
在Python编程中使用的频率非常高,这种表达式其实是Python中的一类特殊的定义函数的形式,使用它可以定义一个匿名函数。当你需要一个简单功能的函数,Lambda
能满足大部分需求。
2. Lambda语法
Lambda语法格式如下:
1 | lambda 参数1, 参数2, ...., 参数n: 执行语句 |
示例代码:
1 | # 计算x的三次方 |
输出:
1 | 27 |
注意,lambda
语句中,冒号(:
)后执行一个表达式,不需要用return
返回结果,你可以使用if
语句:
1 | # 判断是否为偶数 是偶数返回True 否则返回False |
输出:
1 | True |
也可以指定多个参数:
1 | # 求x y z的平均值 |
输出:
1 | 23.33333333333 |
3. Lambda高阶用法
3.1 排序
现有如下列表:
1 | students = [{"name": "John", "age": 10, "score": 87}, |
需求:将列表中的学生信息分别按年龄和分数进行排序。
我们可以使用lambda
表达式和排序函数达成需求,代码:
1 | students = [{"name": "John", "age": 10, "score": 87}, |
输出结果:
1 | 按年龄排序: [{'name': 'John', 'age': 10, 'score': 87}, ......] |
3.2 序列映射
现有如下列表:
1 | numbers = [1, 2, 3, 4, 5, 6, 7] |
需求:将列表内的所有数字元素全部执行一次立方操作。
我们可以结合map
函数达成需求,代码:
1 | numbers = [1, 2, 3, 4, 5, 6, 7] |
输出:
1 | [1, 8, 27, 64, 125, 216, 343] |
map
函数可以用来映射序列,调用参数如下:
1 | map(映射函数, 序列列表) |
映射过程类似于:
numbers | 1 | 2 | 3 | 4 | 5 | 6 | 7 |
---|---|---|---|---|---|---|---|
映射 | ⬇ | ⬇ | ⬇ | ⬇ | ⬇ | ⬇ | ⬇ |
new_numbers | 1 | 8 | 27 | 64 | 125 | 216 | 343 |
3.3 过滤元素
现有如下列表:
1 | numbers = [11, 4, 5, 14, 10, 32, 50, 19, 20] |
需求:过滤出列表中10以上的偶数。
我们可以使用filter
内置函数,代码:
1 | numbers = [11, 4, 5, 14, 10, 32, 50, 19, 20] |
输出:
1 | [14, 10, 32, 50, 20] |
在这个lambda
表达式内,我们限定了条件x % 2 == 0 and x >= 10
,如果2个条件都满足,表达式结果为True
,否则为False
。
整个过程类似于:
numbers | 11 | 4 | 5 | 14 | 10 | 32 | 50 | 19 | 20 |
---|---|---|---|---|---|---|---|---|---|
是否符合条件 | False | False | False | True | True | True | True | False | True |
new_numbers | None | None | None | 14 | 10 | 32 | 50 | None | 20 |
3.4 指定相邻元素的结合条件
现有如下列表:
1 | students = ["John", "Jack", "James", "Malfoy", "Sally"] |
需求:将每两个学生姓名之间添上”,”连接并输出。
我们可以使用reduce
函数,代码:
1 | from functools import reduce |
输出:
1 | John , Jack , James , Malfoy , Sally |
3.5 函数装饰器
当一个函数返回lambda
匿名函数时,这就类似于Python中的函数装饰器了,示例代码:
1 | def welcome_text(text): |
输出:
1 | Welcome Malfoy! |