Python匿名函数lambda的用法详解:语法、传参与应用场景
lambda 的特点
lambda 是 Python 中定义匿名函数的一种方式,也称为 lambda 函数。它无需为函数命名,适合在需要临时或一次性函数功能的场景下使用,通常只需一行代码即可完成函数定义。
为了直观展示其简洁性,来看一组对比:
传统函数
def add_def(a, b):
return a + b
print(add_def(2, 3))lambda 函数
add_lambda = lambda a, b: a + b
print(add_lambda(2, 3))传统函数需要两行代码,而 lambda 函数仅需一行。从代码量上看,lambda 确实更简洁;但若逻辑较复杂,传统函数更易阅读。因此,lambda 最适合用于简单逻辑的场景。
lambda 的用法
基本语法
lambda 由关键字和表达式两部分组成:
lambda : 表达式表达式表示函数的逻辑操作,可以是任意有效的 Python 表达式。例如:
lambda: "Hello, World!"该表达式返回一个匿名函数。通常我们通过 lambda 定义匿名函数并赋值给变量,例如:
func = lambda : 1+1这样定义的函数可以直接调用,也支持传参。
函数传参
匿名函数本身也是函数,支持参数传递,语法如下:
lambda 参数 : 表达式定义单参数函数的示例:
func = lambda x: x**2调用时正常传入参数即可:
func(3) # 返回 9多参数定义方式相同:
func = lambda x, y, z: x + y + z
func(3, 4, 5) # 返回 12参数也支持默认值:
func = lambda x=10, y=20, z=30: x + y + z
func() # 使用默认值,返回 60
func(x=20) # 部分使用默认值,返回 70
func(1, 2, 3) # 不使用默认值,返回 6还支持可变参数(语法:*参数名):
func = lambda *args: sum(args)
func(10) # 返回 10
func(10, 20, 30, 40) # 返回 100结合条件语句
lambda 可以与条件语句结合,语法如下:
lambda 参数 : 条件语句例如简单的三目运算:
func = lambda x: True if x > 0 else False
func(2) # 返回 True多条件判断可以使用多个 if:
func = lambda x: "大于0" if x > 0 else "小于0" if x < 0 else "等于0"如果 x 大于 0,则返回“大于0”;如果 x 不大于 0 但小于 0,则返回“小于0”;如果 x 等于 0,则返回“等于0”。
更复杂的逻辑不建议使用 lambda,以免降低可读性。例如,判断参数是否为字符串并返回其长度:
func = lambda x: len(x) if isinstance(x, str) else -1再如,判断参数是否为正偶数:
func = lambda x: True if (x > 0) and (x % 2 == 0) else Falselambda 的应用场景
处理列表
处理列表元素时,常借助 filter 函数过滤序列(列表、元组等)。filter 的语法如下:
filter(函数, 序列)该函数对序列中的每个元素进行判断,返回 True 则保留元素,返回 False 则丢弃。
案例一:过滤偶数
numbers = [1, 2, 3, 4, 5]
even_numbers = list(filter(lambda x: x % 2 == 0, numbers))
# 结果为 [2, 4]也可以直接生成 1 到 10 的偶数列表:
even_numbers = list(filter(lambda x: x % 2 == 0, range(1, 11)))案例二:过滤奇数
numbers = [1, 2, 3, 4, 5]
odd_numbers = list(filter(lambda x: x % 2 != 0, numbers))
# 结果为 [1, 3, 5]案例三:过滤字符串长度大于 3 的元素
names = ["AAA", "BBBB", "CCCCC", "DDD"]
long_names = list(filter(lambda name: len(name) > 3, names))
# 结果为 ["BBBB", "CCCCC"]案例四:过滤空字符串
L = ["AAA", "BB", "", "DDD", ""]
non_empty = list(filter(lambda l: l != "", L))
# 结果为 ["AAA", "BB", "DDD"]处理字典
案例一:按值排序
age = {"小李": 18, "小王": 27, "小张": 23}
# 升序
sorted_age = dict(sorted(age.items(), key=(lambda item: item[1])))
# 降序
sorted_age = dict(sorted(age.items(), key=(lambda item: item[1]), reverse=True))利用 lambda 表达式作为排序关键字,根据字典的值对键值对排序,并通过 reverse 参数控制升降序。
对于更复杂的字典列表,同样可以处理:
students = [
{"姓名": "小李", "年龄": 18, "成绩": "A"},
{"姓名": "小王", "年龄": 20, "成绩": "B"},
{"姓名": "小张", "年龄": 19, "成绩": "A"},
{"姓名": "小徐", "年龄": 21, "成绩": "C"}
]
sorted_students = sorted(students, key=lambda x: x["年龄"]) # 按年龄排序案例二:保留值大于 20 的键值对
age = {"小李": 18, "小王": 27, "小张": 23}
passed_age = dict(filter(lambda item: item[1] >= 20, age.items()))
# 结果为 {"小王": 27, "小张": 23}这里 age.items() 返回键值对,lambda 接收每个键值对,通过索引 1 获取值进行判断,返回 True 则保留,False 则丢弃。
总结
lambda 函数以其简洁的语法在简单逻辑场景中非常实用,尤其适合与 filter、sorted 等函数配合处理列表和字典。掌握 lambda 的用法,可以有效提升代码的简洁性和开发效率。
原文链接:本站整理
本文来自互联网用户投稿,该文章观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若内容造成侵权/违法违规/事实不符,请将相关资料发送至 service@2cto.cc 进行投诉反馈,一经查实,立即处理!
您可能感兴趣的文章:
下一篇:Python执行多行cmd命令:单&与双&&的区别详解