Python匿名函数lambda的用法详解:语法、传参与应用场景

更新时间:2026-10-10 09:59:00 来源:本站整理 浏览:0

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 False

lambda 的应用场景

处理列表

处理列表元素时,常借助 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 进行投诉反馈,一经查实,立即处理!